两阶段终止模式Demo

image

interrupt实现

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class TwoPhaseTerminationDemo{
    public static void main(String[] args) throws InterruptedException {
        TwoPhaseTermination twoPhaseTermination = new TwoPhaseTermination();
        twoPhaseTermination.start();

        Thread.sleep(10000);

        twoPhaseTermination.stop();
    }
}
@Slf4j
class TwoPhaseTermination {
    private Thread monitor;

    public void start(){
        monitor = new Thread(()->{
           while (true){
               Thread cur = Thread.currentThread();
               if (cur.isInterrupted()){
                    log.info("处理后事");
                   break;
               }
               try {
                   Thread.sleep(2000);
                   log.info("进行监控");
               } catch (InterruptedException e) {
                   e.printStackTrace();
                   cur.interrupt();
               }
           }
        });
        monitor.start();
    }

    public void stop(){
        monitor.interrupt();
    }


}

volatile关键字实现

package monitor;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class TwoPhaseTerminationDemo{
    public static void main(String[] args) throws InterruptedException {
        TwoPhaseTermination_volatile twoPhaseTermination = new TwoPhaseTermination_volatile();
        twoPhaseTermination.start();

        Thread.sleep(5500);

        twoPhaseTermination.stop();
    }
}

@Slf4j
class TwoPhaseTermination_volatile {
    private Thread monitorThread;

    private volatile boolean stop = false;

    public void start(){
        monitorThread = new Thread(()->{
            while (true){
                if (stop){
                    log.info("处理后事");
                    break;
                }
                try {
                    Thread.sleep(1000);
                    log.info("进行监控");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        monitorThread.start();
    }

    public void stop(){
        stop = true;
        monitorThread.interrupt();
    }
}
posted @ 2024-01-16 22:26  ︶ㄣ演戲ㄣ  阅读(6)  评论(0)    收藏  举报