欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

015.3线程停止

程序员文章站 2022-05-19 08:09:38
其他线程wait,主线程执行完毕,程序不会退出。通过interrupt()方法强制弄醒解决线程在主线程结束了,还在等待的情况 ......

其他线程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 }