多线程-停止线程方式-Interrupt

 1 package multithread4;
 2 /*
 3  * 停止线程:
 4  * 1,stop方法。
 5  * 
 6  * 2,run方法结束。
 7  * 
 8  * 怎么控制线程的任务结束呢?
 9  * 任务中都会有循环结构,只要控制住循环就可以结束任务,线程就结束
10  * 
11  * 控制循环通常就用定义标记来完成。
12  * 
13  * 但是如果线程处于冻结状态,无法读取标记。如何结束呢?
14  * 
15  * 可以使用interrupt()方法将线程从冻结状态强制恢复到运行状态中来,让线程具备cpu执行资格
16  * 但是强制动作会发生InterruptedException,记得要处理
17  */
18 
19 
20 
21 class StopThread implements Runnable{
22     private boolean flag = true;
23     public synchronized void run() {
24         while(flag) {
25             try {
26                 wait();//t0 t1进来都等待了读取不了标记,结束不了任务
27             } catch (InterruptedException e) {
28                 System.out.println(Thread.currentThread().getName()+"......."+e);
29                 flag = false;
30             }
31             System.out.println(Thread.currentThread().getName()+".....");
32         }
33     }
34     public void setFlag() {
35         flag = false;
36     }
37 }
38 public class StopThreadDemo {
39 
40     public static void main(String[] args) {
41         // TODO Auto-generated method stub
42         StopThread st = new StopThread();
43         
44         Thread t1 = new Thread(st);
45         Thread t2 = new Thread(st);
46         
47         t1.start();
48         t2.start();
49         
50         int num = 1;
51         for (; ; ) {
52             if (++num == 50) {
53 //                st.setFlag();
54                 t1.interrupt();
55                 t2.interrupt();
56                 break;
57             }
58             System.out.println("main...."+num);
59         }
60         System.out.println("over");
61     }
62 
63 }
StopThreadDemo

 

posted @ 2021-11-11 17:04  doremi429  阅读(38)  评论(0)    收藏  举报