第十章 Two-Phase Termination

来源:互联网 发布:中国水果消费数据统计 编辑:程序博客网 时间:2024/05/23 00:04

背景介绍:我们将线程进行平常的处理的状态称为作业中。当希望结束这个线程是,则送出终止请求。

接着这个线程,并不会马上结束,而会开始进行必要的刷新工作,这个状态为终止处理中。从作业中

改变成终止处理中第一阶段终止处理中时,不会进行平常操作。尽管线程还在进行,但进行的是

终止处理。直到终止处理结束后,才真正结束线程。终止处理中的操作结束,是第二阶段

1.安全的结束(安全性)

2.一定会进行终止处理(生命性)

3.收到终止请求后,要尽快开始终止处理(响应性)


public class CountupThread extends Thread {    private long counter = 0;    private volatile boolean shutdownRequested = false;//保证内存同步    public void shutdownRequest() {        shutdownRequested = true;        interrupt();//保证生命性    }    public boolean isShutdownRequested() {        return shutdownRequested;    }      public final void run() {        try {        while (!isInterrupted()) {                doWork();            }        } catch (InterruptedException e) {        } finally {            doShutdown();        }    }    private void doWork() throws InterruptedException {        counter++;        System.out.println("doWork: counter = " + counter);        //Thread.sleep(500);        //此时不能检测到是否中断        try {            Thread.sleep(500);        } catch (InterruptedException e) {        }    }    private void doShutdown() {        System.out.println("doShutdown: counter = " + counter);    }}


0 0
原创粉丝点击