两阶段终止模式volatile版本

Posted 一名不断学习的程序猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两阶段终止模式volatile版本相关的知识,希望对你有一定的参考价值。

public class Test {
    public static void main(String[] args) throws InterruptedException {
        TwoPhaseTermination tpt = new TwoPhaseTermination();
        tpt.start();
        Thread.sleep(3500);
        System.out.println("停止监控");
        tpt.stop();
    }
}

class TwoPhaseTermination {
    // 监控线程
    private Thread monitorThread;
    // 停止标记
    private volatile boolean stop = false;
    // 判断是否执行过 start 方法
    private boolean starting = false;

    // 启动监控线程
    public void start() {
        synchronized (this) {
            if (starting) { // false
                return;
            }
            starting = true;
        }
        monitorThread = new Thread(() -> {
            while (true) {
                Thread current = Thread.currentThread();
                // 是否被打断
                if (stop) {
                    System.out.println("料理后事");
                    break;
                }
                try {
                    Thread.sleep(1000);
                    System.out.println("执行监控记录");
                } catch (InterruptedException e) {
                }
            }
        }, "monitor");
        monitorThread.start();
    }

    // 停止监控线程
    public void stop() {
        stop = true;
        monitorThread.interrupt();
    }
}

 

以上是关于两阶段终止模式volatile版本的主要内容,如果未能解决你的问题,请参考以下文章

Day854.两阶段终止模式 -Java 并发编程实战

Day854.两阶段终止模式 -Java 并发编程实战

多线程编程之两阶段终止模式

多线程设计模式:第五篇 - Future模式和两阶段终止模式

java并发设计模式

java并发设计模式