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 }