1. 终止模式之两阶段终止模式(Two Phase Termination)
1.1 案例:1.2 错误思路1.3 两阶段终止模式
1. 利用 isInterrupted
1. 终止模式之两阶段终止模式(Two Phase Termination) 1.1 案例:在一个线程 T1 中如何“优雅”终止线程 T2?这里的【优雅】指的是给 T2 一个料理后事的机会。
1.2 错误思路使用线程对象的 stop() 方法停止线程
stop 方法会真正杀死线程,如果这时线程锁住了共享资源,那么当它被杀死后就再也没有机会释放锁,其它线程将永远无法获取锁
使用 System.exit(int) 方法停止线程
1.3 两阶段终止模式 1. 利用 isInterrupted目的仅是停止一个线程,但这种做法会让整个程序都停止
interrupt 可以打断正在执行的线程,无论这个线程是在 sleep,wait,还是正常运行。
//待优化
class TPTInterrupt {
private Thread thread;
//启动
public void start(){
thread = new Thread(() -> {
while(true) {
Thread current = Thread.currentThread();
if(current.isInterrupted()) {
log.debug("料理后事");
break;
}
try {
Thread.sleep(1000);
log.debug("将结果保存");
} catch (InterruptedException e) {
//重新设置打断标记(打断 sleep 的线程, 会清空打断状态(将状态置为false))为true,进行处理后事
current.interrupt();
}
// 执行监控操作
}
},"监控线程");
thread.start();
}
//停止
public void stop() {
thread.interrupt();
}
}
调用
TPTInterrupt t = new TPTInterrupt();
t.start();
Thread.sleep(3500);
log.debug("stop");
t.stop();



