package com.neutron.thread.stopthread;
/**
* stop方法已经过时,不再使用stop方法。
* 如何停止线程?run方法结束。
* 开启多线程运行,运行代码通常是循环结构,只要控制住循环,就可以让run方法结束,即线程结束。
*
* 特殊情况,如果线程处于wait,sleep状态,就不会读取标记,线程就不会结束。
* 当没有指定的方式让冻结的线程恢复到运行状态是,需要对冻结的线程进行清除,
* 强制让线程恢复到运行状态中来。
* @author zhanght
*
*/
public class StopThread implements Runnable {
private boolean flag = true;
@Override
public synchronized void run() {
while (flag) {
try {
this.wait();
} catch (InterruptedException e) {
System.out.println(Thread.currentThread().getName() + " - exception");
flag = false;
}
System.out.println("-->run");
}
}
public void changeStatus() {
this.flag = false;
}
}
package com.neutron.thread.stopthread;
public class ThreadMain {
public static void main(String[] args) {
StopThread stop = new StopThread();
Thread t1 = new Thread(stop);
Thread t2 = new Thread(stop);
t1.start();
t2.start();
int count = 0;
while (true) {
if (count++ == 20){
t1.interrupt();
t2.interrupt();
break;
}
System.out.println(Thread.currentThread().getName() + count);
}
System.out.println("over");
}
/*
* main1
main2
main3
main4
main5
main6
main7
main8
main9
main10
main11
main12
main13
main14
main15
main16
main17
main18
main19
main20
over
Thread-0 - exception
-->run
Thread-1 - exception
-->run
*/
}