黑马程序员---多线程interrupt方法和wait notify方法(原创)

原创 2013年12月04日 10:00:54
---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

/*
stop方法已经过时。

如何停止线程?
只有一种,run方法结束。
开启多线程运行,运行代码通常是循环结构。

只要控制住循环,就可以让run方法结束,也就是线程结束。


特殊情况:
当线程处于了冻结状态。
就不会读取到标记。那么线程就不会结束。

当没有指定的方式让冻结的线程恢复到运行状态是,这时需要对冻结进行清除。
强制让线程恢复到运行状态中来。这样就可以操作标记让线程结束。

Thread类提供该方法 interrupt();

 

*/


package FirstTest;

public class NewThread {
 public static void main(String args[])
 {
  Number n = new Number();
  Thread t1 = new Thread (n);
  Thread t2 = new Thread(n);
  
  t1.start();
  t2.start();
  
  int x = 0;//下面是主线程上的代码,主线程定义一个变量x = 0
  while(true)//无限循环
  {
   if(x++ == 60)//如果变量递增到60以后
   {
    break;//break;
   }
    n.changeFlag();//改变资源的flag标记,如此以来两个线程全部都挂到wait方法上(也就是让两个线程处于冻结状态),好测试interrupt方法
    t1.interrupt();//当线程1处于冻结状态后,线程挂起来了,调用Interrupt方法即强制恢复线程至正常状态,wait方法会报异常,然后在catch块(异常发生时要做的事情)中改变标记(flag)以结束线程
    t2.interrupt();
   System.out.println(Thread.currentThread().getName()+"......."+x);
  }
  System.out.println("over");
 }
}


class Number implements Runnable //给出一个run方法,让两个线程同时分享资源
{
 private boolean flag = false; //标记就是为了之后改变循环状态。改变标记使得两个线程冻结----用interrupt方法把冻结状态的线程恢复过来,然后在在67行把标记改为false,标记已改线程就处于停止状态
 public synchronized  void run()
 {
  while(flag)
  {
   try {
    wait();
    }
   catch (InterruptedException e)
    {
    System.out.println("exception");
    flag = false;
    }
   
   System.out.println(Thread.currentThread().getName()+"......test");
 
  }
 }
 
 
 
 
 public void changeFlag()
 {
  flag = true;
 }
}


/*
main.......1
main.......2
main.......3
main.......4
main.......5
main.......6
main.......7
main.......8
main.......9
main.......10
main.......11
main.......12
main.......13
main.......14
main.......15
main.......16
main.......17
main.......18
main.......19
main.......20
main.......21
main.......22
main.......23
main.......24
main.......25
main.......26
main.......27
main.......28
main.......29
main.......30
main.......31
main.......32
main.......33
main.......34
main.......35
main.......36
main.......37
main.......38
main.......39
main.......40
main.......41
main.......42
main.......43
main.......44
main.......45
main.......46
main.......47
main.......48
main.......49
main.......50
main.......51
main.......52
main.......53
main.......54
main.......55
main.......56
main.......57
main.......58
main.......59
main.......60
over
exception
Thread-0......test
exception
Thread-1......test

 

 

*/

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

相关文章推荐

黑马程序员——Java多线程—线程同步—wait、notify、notifyAll

关于wait、notify、notifyAll如何使用不再说明

多线程同步-线程之间通信:wait notify 另外还有interrupt,join方法

线程之间的相互作用:线程之间通信 (生产者-消费者问题:可以看成两个线程,生产者一个线程,消费者一个线程,生产者这生产一个东西告诉消费者可以消费了,消费者消费完这个东西就通知生产者可以生产了,绝对...

Java多线程sleep(),join(),interrupt(),wait(),notify()

关于Java多线程知识可以看看《Thinking in Java 》中的多线程部分和《Java网络编程》中第5章多线程的部分以下是参考>的 1. sleep() & interrupt()     线...

java多线程(二) sleep(),yield(),wait(), interrupt()方法

Thread对象调用start方法后,

java多线程:wait(),notify(),notifyAll()方法

java.lang.Object类中提供了两个用于线程通信的方法:wait()和notify()。如果线程对一个同步对象this发出一个wait()调用,该线程会暂停执行,直到另一个线程对同一个同步对...

Java线程和多线程(二)——对象中的wait,notify以及notifyAll方法

在Java的Object类中包含了3个final的方法,这三个方法允许线程来交流资源是否被锁定。这三个方法就是wait(),notify()以及notifyAll().在对象上调用这三个方法的线程需要...

Java 多线程 线程间的通信——wait及notify方法

线程间的相互作用   线程间的相互作用:线程之间需要一些协调通信,来共同完成一件任务。   Object类中相关的方法有两个notify方法和三个wait方法:   http://d...

Java 多线程(七) 线程间的通信——wait及notify方法

线程间的相互作用   线程间的相互作用:线程之间需要一些协调通信,来共同完成一件任务。   Object类中相关的方法有两个notify方法和三个wait方法:   http://docs.or...

java多线程中wait()和notify()和notifyAll()及其他常用方法使用

Java线程中sleep()、wait()和notify()和notifyAll()、suspend和resume()、yield()、join()、interrupt()的用法和区别  从操作...

Java 多线程 线程间的通信——wait及notify方法

博客地址:http://www.cnblogs.com/mengdd/archive/2013/02/20/2917956.html 线程间的相互作用   线程间的相互作用:线...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员---多线程interrupt方法和wait notify方法(原创)
举报原因:
原因补充:

(最多只允许输入30个字)