美文网首页
Two-Phase Termination 模式

Two-Phase Termination 模式

作者: 心上那朵云 | 来源:发表于2020-07-23 21:13 被阅读0次

    Two-Phase Termination 模式

    0. 描述了什么事?

    终止一个线程时,需要先请求,再终止(温柔一点)

    1. 类的说明,怎么抽象?

    类名 说明
    Main 启动类
    CountUpThread 计数线程,负责计数,提供一个终止线程的 shutdownRequest() 方法

    2. 程序示例

    1. Main.java

    package two.phase.termination;
    
    public class Main {
        public static void main(String[] args) {
            System.out.println("Main BEGIN : ");
            try {
                CountUpThread t = new CountUpThread();
                t.start();                                      // 启动计数线程
                Thread.sleep(10000);
                System.out.println("Main shutdownRequest...");
                t.shutdownRequest();                            // 中断计数线程
    
                System.out.println("Main Join...");
                t.join();                                       // 并入主线程,让主线程等待它的结束,然后大家一起结束
            } catch (InterruptedException e) {
            }
            System.out.println("Main End");
        }
    }
    

    2. CountUpThread.java

    package two.phase.termination;
    
    public class CountUpThread extends Thread {
        // 用来判断是否开始了终止
        private volatile boolean shutdownRequested = false;
    
        // 用于计数
        private long count = 0;
    
        // 中断任务请求方法
        public void shutdownRequest() {
            shutdownRequested = true;
            interrupt();
        }
    
        // 是否终止线程
        public boolean isShutdownRequested() {
            return shutdownRequested;
        }
    
        @Override
        public final void run() {
            try {
                while (!shutdownRequested) {
                    doWork();
                }
            } catch (InterruptedException e) {
            } finally {
                // 如果发生了异常,一定要完成清尾工作
                doShutdown();
            }
        }
    
        private void doWork() throws InterruptedException {
            count++;
            System.out.println("Working... count = " + count);
            Thread.sleep(500);
        }
    
        private void doShutdown() {
            System.out.println("Shutdown... count = " + count);
        }
    }
    

    相关文章

      网友评论

          本文标题:Two-Phase Termination 模式

          本文链接:https://www.haomeiwen.com/subject/pqlklktx.html