Java 优雅的终止线程
来源:互联网 发布:重做系统分区数据丢失 编辑:程序博客网 时间:2024/05/16 08:55
Java中原来在Thread中提供了stop()方法来终止线程,但这个方法是不安全的,所以一般不建议使用。《Java多线程模式》中有一种叫Two-Phase Termination(两步终止)的模式可以优雅的终止线程。
首先在线程中设置一个标志位:
private volatile boolean shutdownRequested = false;
然后在运行函数里,以这个标志位来判断是否执行操作:
public final void run() {
try {
while (!shutdownRequested) {
doWork();
}
} catch (InterruptedException e) {
} finally {
doShutdown();
}
}
然后提供shutdown()接口供外部调用:
public final void shutdownRequest() {
shutdownRequested = true;
interrupt();
}
客户可以这样子使用:
thread.shutdown()
thread.join()
这个模式中采用了两个步骤来终止线程,所以叫两步终止模式。第一步,先将执行标志位shutdownRequested 设为false,是作业中的线程转变为终止处理中的状态,第二部才是真正去执行终止操作。这样的做法可以保证线程的安全性、生命性和响应性。
(1)安全性:不会在线程正在执行关键区域--Critical Section的时候突然结束掉
(2)生命性:一定会进行终止处理,shutdown()中,会调用interrupt(),保证即使线程处于sleep或wait状态也可以被立即终止,而客户端调用shutdown()之后,会调用join(),保证了这个线程会执行完,也就确保了终止操作doshutdown()一定会执行
(3)响应性:将shutdownRequested 设为volatile ,能保证线程收到终止请求后,会尽快开始终止处理。
- Java 优雅的终止线程
- Java 优雅的终止线程
- Java 优雅的终止线程
- Java如何优雅的终止线程
- 优雅的终止线程
- 如何优雅的终止线程
- Java中如何优雅正确的终止线程
- Java中如何正确而优雅的终止运行中的线程
- JAVA线程的终止
- 如何优雅地终止正在运行的子线程
- java终止线程的方法
- Java 终止线程的方法
- Java(线程的终止)
- 优雅的终止docker容器
- Java中如何优雅的结束线程
- Java线程的终止和同步
- JAVA中 终止线程的方法
- JAVA中终止线程的方法
- 阻尼二极管
- Request获取请求数据
- 敏捷软件开发:原则、模式和实践
- Java六大必须理解的问题
- Project Euler -- 欧拉题集 F#(Fsharp)及Haskell 版 - No.1, No.2
- Java 优雅的终止线程
- shell 函数
- RHEL6.1安装光盘本地YUM更新源
- 需求说明文档之阅读人员分析,如何提高需求说明文档的读者认可度
- QQ空间日志下载解析类(附日志解析类源码)
- sqlite for c#
- Linux网络协议栈之驱动框架
- linux平台设备驱动
- git am PATCH 失败的处理方法