Thread专题(6)中,如何正确取消与关闭线程操作?

2026-05-28 02:590阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计5810个文字,预计阅读时间需要24分钟。

Thread专题(6)中,如何正确取消与关闭线程操作?

本文被收录在系列文章《架构师必备》(系列)中。在Java中,没有提供停止线程的直接机制,直接安全地停止线程是强制线程停止的操作,而`Thread.stop()`和`Thread.suspend()`方法存在严重的缺陷,因此不应使用。

此文被笔者收录在系列文章 ​​​架构师必备(系列)​​ 中

java中没有提供任何机制,来安全是强迫线程停止手头的工作,Thread.stop和Thread.suspend方法存在严重的缺陷,不能使用。但每个Thread提供了Interruption中断,一种协作机制来协调线程间的操作和控制。这是JAVA中推荐的方式。程序不应该立即停止,应该采用中断这种协作机制来处理,正确的做法是:先清除当前进程中的工作,再终止。正常有四种方法:

  • 正常结束;
  • 设置一个标志位,由外部线程来控制,原理是设置一个volatile变量,使线程池不在创建新线程达到平滑关闭的效果;适合一直在运行的长时间任务;
  • 阻塞线程:用interrupt()方法会马上抛出异常,捕获到这个线程后break跳出强制关闭;
  • 未阻塞线程:用interrupt()方法设置中断标志位,然后在循环时用isInterrupted()来判断中断标志位,其实和自定义标志位一样原理;

一、任务取消

当外部代码能在活动自然完成之前,把它更改为完成状态,被称为取消。取消的原因很多种可能,比如:用户请求、限时活动、应用程序设计如此、错误、关闭。

java中没有一种绝对安全停止线程的方法,只能选择相互协作的机制,通过协作,使任务和代码遵循一个统一的协议,用来请求取消。一个可取消的任务必须有取消策略,这个策略是一套程序,规定了不同任务或机制间的协作,保证数据的统一。

阅读全文

本文共计5810个文字,预计阅读时间需要24分钟。

Thread专题(6)中,如何正确取消与关闭线程操作?

本文被收录在系列文章《架构师必备》(系列)中。在Java中,没有提供停止线程的直接机制,直接安全地停止线程是强制线程停止的操作,而`Thread.stop()`和`Thread.suspend()`方法存在严重的缺陷,因此不应使用。

此文被笔者收录在系列文章 ​​​架构师必备(系列)​​ 中

java中没有提供任何机制,来安全是强迫线程停止手头的工作,Thread.stop和Thread.suspend方法存在严重的缺陷,不能使用。但每个Thread提供了Interruption中断,一种协作机制来协调线程间的操作和控制。这是JAVA中推荐的方式。程序不应该立即停止,应该采用中断这种协作机制来处理,正确的做法是:先清除当前进程中的工作,再终止。正常有四种方法:

  • 正常结束;
  • 设置一个标志位,由外部线程来控制,原理是设置一个volatile变量,使线程池不在创建新线程达到平滑关闭的效果;适合一直在运行的长时间任务;
  • 阻塞线程:用interrupt()方法会马上抛出异常,捕获到这个线程后break跳出强制关闭;
  • 未阻塞线程:用interrupt()方法设置中断标志位,然后在循环时用isInterrupted()来判断中断标志位,其实和自定义标志位一样原理;

一、任务取消

当外部代码能在活动自然完成之前,把它更改为完成状态,被称为取消。取消的原因很多种可能,比如:用户请求、限时活动、应用程序设计如此、错误、关闭。

java中没有一种绝对安全停止线程的方法,只能选择相互协作的机制,通过协作,使任务和代码遵循一个统一的协议,用来请求取消。一个可取消的任务必须有取消策略,这个策略是一套程序,规定了不同任务或机制间的协作,保证数据的统一。

阅读全文