两阶段中断模式实例

#两阶段中断模式实例
今天学习了知识,感觉非常的好,附上学习代码提供参考。

先附上两阶段中断模式实例的流程图
在这里插入图片描述

以下的代码是类似监控的线程的例子,代码每行基本都有备注。

import org.apache.log4j.Logger;

public class DuobleInterupt {
    private static Logger logger = Logger.getLogger(DobleInterupt.class);

    public static void main(String[] args) throws InterruptedException {
        TwoPhaseTerminaiton tpt = new TwoPhaseTerminaiton();
        tpt.start(); //启动监控线程
        //运行3.5秒
        Thread.sleep(3500);

         tpt.stop();
    }

}
class TwoPhaseTerminaiton{
    private static Logger logger = Logger.getLogger(DobleInterupt.class);
    private Thread moniter;
    //启动监控线程
    public void start(){
        moniter = new Thread(()->{
            while(true){
                Thread current = Thread.currentThread();
                if(current.isInterrupted() == true){ //中断标志为true,表示被interrupt,
                    logger.debug("interrupted ,处理后事");
                    break;
                }
                //没有中断则继续监控
                try {
                    //以下两行都有可能被打断
                    //第一行被打断 为异常时的打断,会抛出异常InterrutedException,打断标志位false
                    //第二行被打断 为正常时的打断, 打断表示为true,不会抛出异常
                    Thread.sleep(1000);
                    logger.debug("继续进行 moniter");
                } catch (InterruptedException e) {
                    //上面一行的Interruted会将打断标志设为false
                    e.printStackTrace();
                    //此处的逻辑是正常额业务处理
                    //异常时的打断 中断标志为false,捕获到异常时,在异常处理处重新设置一次打断标记,打断表示会变为true,再次循环时就会break循环
                    current.interrupt();
                }
            }
        });
        moniter.start();
    }
    //停止监控线程
    public void stop(){
        moniter.interrupt();
    }
}

学习使我快乐,每天学习一点点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值