先执行完终止处理再终止线程。

该模式的要点如下:
- 安全地终止线程(安全性)
- 必定会进行终止处理(生存性)
- 发出终止请求后尽快进行终止处理(响应性)
示例
首先会启动一个线程,该线程每隔约500毫秒进行一次计数。接着,在大约10秒后程序就会终止该线程。
类图

时序图

CountupThread.java
1 | public class CountupThread extends Thread { |
Main.java
1 | public class Main { |
运行结果
1 | main: BEGIN |
登场角色
TerminationRequester(终止请求发出者)
TerminationRequester角色负责向Terminator角色发出终止请求。在示例程序中,由Main类扮演此角色。
Terminator(终止者)
Terminator角色负责接收终止请求,并实际执行终止处理。它提供了表示终止请求的shutdownRequest方法。shutdownRequest方法不需要使用Single Threaded Execution模式。
当shutdownRequest方法被调用后,Terminator角色会在考虑了安全性的基础上,自己进入“终止处理中”状态。接着当终止处理结束后,Terminator角色就会终止自己。
Terminator角色带有一个表示自己是否已经接收到终止请求的标志,在需要安全地开始终止处理时,会检查这个标志。如果能够频繁地检查该标志,就可以缩短接收到终止请求后变为“终止处理中”状态所需的时间。
在示例程序中,由CountupThread类扮演此角色。
类图
