/**
* 简单情况下可以使用退出标志来停止线程,但如果线程处于阻塞状态,退出标志无
* 法被及时察觉,则线程就无法停止;因此在使用退出标志的同时也要使用interrupt()
*
* @author yangww
*/
public class main_test {
public static void main(String[] args) throws InterruptedException {
MyThread m1 = new MyThread();//同一个m1只能被启动一次,停止线程并不是说它可以重新启动;
m1.start();
Thread.sleep(5000);
// System.out.println("使用停止标志终止线程");
// m1.stop = true; // 设置共享变量为true
System.out.println("使用interrupt()终止线程");
// interrupt()方法不会中断一个正在运行的线程,但它可以使一个被阻塞的线程抛出一个中断异常,在此异常里,可以设置退出标志,从而使用线程退出;
m1.interrupt();
}
}
class MyThread extends Thread {
// 此任务可能被多个线程同时执行,stop作为多线程共享的同步变量。
volatile boolean stop = false;// 退出标志,注:如果线程处于阻塞状态,则退出标志不会被及时更新,线程将无法退出;
public void run() {
while (!stop) {
try {
System.out.println("我在执行---");
sleep(1000);
} catch (InterruptedException e) {
System.out.println("接到InterruptedException,准备更新线程退出标志");
stop = true; // 在异常处理代码中修改共享变量的状态
}
}
}
}
java停止线程
最新推荐文章于 2023-05-09 20:31:55 发布