问题
一个线程t1如何优雅地终止线程t2?
stop方法会杀死线程,这可不行,如果该线程给某个资源加了锁,线程死掉了,资源都无法释放了。
如下解决方案:
启动一个监控线程,判断监测线程的打断标记是否为true。
如果为true就在结束监控线程前处理一些必要的逻辑。(比如关闭资源,释放资源等)
如果为false就sleep1秒再进行监控。如果在sleep中被打断,就抛出异常,就在异常代码块中再次设置打断标记为true,即可停止监控线程。(这里为啥要sleep呢?因为监控线程while(true)一直执行会很耗费性能,加入sleep方法,才会出现上下文切换。才能把cpu的时间片分给别的线程执行。)
public class TwoPhraseInterrupt {
public static void main(String[] args) throws InterruptedException {
TwoPhrase twoPhrase = new TwoPhrase();
//启动监控线程
twoPhrase.start();
Thread.sleep(5000);
//5s后停止监控线程
twoPhrase.sto