015.3线程停止

其他线程wait,主线程执行完毕,程序不会退出。通过interrupt()方法强制弄醒
解决线程在主线程结束了,还在等待的情况

 1 //演示停止线程。
 2 class Demo implements Runnable
 3 {
 4     private boolean flag = true;
 5     public synchronized void run()
 6     {
 7         while(flag)
 8         {
 9             try
10             {
11                 wait();//t1  t2
12             }
13             catch (InterruptedException e)
14             {
15                 System.out.println(Thread.currentThread().toString()+"....."+e.toString());
16                 changeFlag();
17             }
18 
19             System.out.println(Thread.currentThread().getName()+"----->");
20         }
21     }
22     //对标记的修改方法。
23     public void changeFlag()
24     {
25         flag = false;
26     }
27 }
28 
29 
30 class StopThreadDemo 
31 {
32     public static void main(String[] args) 
33     {
34         Demo d = new Demo();
35 
36         Thread t1 = new Thread(d,"旺财");
37         Thread t2 = new Thread(d,"小强");
38         t1.start();
39         //将t2标记为后台线程,守护线程。
40 //        t2.setDaemon(true);
41         t2.start();
42 
43         int x = 0;
44         while(true)
45         {
46             if(++x == 50)//条件满足。
47             {
48 //                d.changeFlag();//改变线程任务代码的标记,让其他线程也结束。
49                 //对t1线程对象进行中断状态的清除,强制让其恢复到运行状态。
50                 t1.interrupt();
51                 //对t2线程对象进行中断状态的清除,强制让其恢复到运行状态。
52                 t2.interrupt();
53                 break;//跳出循环,主线程可以结束。
54             }
55             System.out.println("main-------->"+x);
56         }
57         System.out.println("over");
58     }
59 }

 

posted @ 2018-03-25 15:58  _nbloser  阅读(...)  评论(... 编辑 收藏