脚本宝典收集整理的这篇文章主要介绍了Java多线程基础(十二)——Two-phase Termination模式,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
一、定义
我们将线程的正常处理状态称为“作业中”,当希望结束这个线程时,则送出“终止请求”。接着,这个线程并不会立刻结束,而是进入“终止处理中”状态,此时线程还是运行着的,可能处理一些释放资源等操作。直到终止处理完毕,才会真正结束。
Two-phase Termination主要考虑以下问题:
- 安全地结束(安全性);
- 一定会进行终止处理(生命性);
- 收到“终止请求”后,要尽快进行终止处理(响应性);
二、模式案例
该案例中,线程每隔500ms将计数器增加1,在大约10s后结束。
计数线程类:
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 (!shutdownRequested) { doWork(); } } catch (InterruptedException e) { } finally { DOShutdown(); } } private void doWork() throws InterruptedException { counter++; System.out.println("doWork: counter = " + counter); Thread.sleep(500); } private void doShutdown() { System.out.println("doShutdown: counter = " + counter); } }
执行:
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) { e.printStackTrace(); } System.out.println("main: END"); } }
三、模式讲解
Two-phase Termination模式的角色如下:
- TerminationRequester参与者
TerminationRequester参与者用于调用终止请求。(案例中的Main类)
- Terminator参与者
Terminator参与者接受终止请求,进行实际的终止处理,提供shutdownRequest终止方法供外界调用。
Terminator参与者拥有一个标识(门闩)表示是否已经收到终止请求
以上是脚本宝典为你收集整理的Java多线程基础(十二)——Two-phase Termination模式全部内容,希望文章能够帮你解决Java多线程基础(十二)——Two-phase Termination模式所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。