首页 > 其他 > 详细

两阶段终止模式

时间:2021-08-23 15:06:06      阅读:13      评论:0      收藏:0      [点我收藏+]

两阶段终止模式

解决的问题:

在一个线程T1中优雅的终止线程T2?这里的【优雅】指的是给T2一个料理后事的机会

错误的思路:

1、调用Stop方法来停止线程

Stop方法会真正的杀死线程,但是如果这时候线程锁住了共享资源,那么当他被杀死后就再也没有机会释放锁,其他线程永远无法获取锁

2、使用System.ext()方法停止线程

这种做法会使得整个进程停止,显然有点小题大做

两阶段终止模式

假设我们需要有一个线程来监控服务器资源,每过两秒就记录一次当前服务器的状态,同时我们需要有一个中断机制来结束当前线程。我们可以讲程序的流程图归结如下

技术分享图片

 

代码实现

public class Test3 {
    public static void main (String[] args) throws Exception{
        TwoPhaseTermination tgt = new TwoPhaseTermination();
        tgt.start();
        Thread.sleep(3500);
        tgt.stop();

    }
}
class TwoPhaseTermination{
    private Thread moniter;
    // 启动监控线程
    public void start(){
        moniter = new Thread(()->{
            while(true){
                Thread now  = Thread.currentThread();
                if(now.isInterrupted()){
                    System.out.println(now.getName()+"处理后事");
                    break;
                }
                try {
                    Thread.sleep(1000);
                    System.out.println(now.getName()+"执行监控记录");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    // 重新设置打断标记
                    now.interrupt();;

                }
            }
        },"t1");

        moniter.start();
    }
    //停止监控线程
    public void stop(){
        moniter.interrupt();
    }
}

 

 

 

两阶段终止模式

原文:https://www.cnblogs.com/tombraider-shadow/p/15175202.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!