多线程-停止线程方式-定义标记

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

 

posted @ 2021-11-11 16:46  doremi429  阅读(23)  评论(0)    收藏  举报