线程的终止

Posted boboshenqi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程的终止相关的知识,希望对你有一定的参考价值。

1.Thread的终止

首先,不建议使用Thread类的stop方法,因为会强制释放线程使用的资源,例如锁、文件等,会出现令人意想不到的问题。Java中Thread类提供了interupt方法来设置线程的中断标志位使线程停止,但是interrupt方法并不是万能的,只能在有限的情况下中断线程:

  1. 线程处于等待、条件等待时。例如在线程中调用了lock.wait()、Thread.sleep()等方法
  2. nio中会能够检测中断标志位的方法
  3. 在线程中不断检测了中断标志位。例如在while循环中调用isInterrupted方法检测是否设置了中断标志位,如果设置了中断标志位,则退出线程

但是像大多数情况,例如线程在读写文件等IO耗时的工作是不会处理中断标志的,也不会中断线程。在这种情况下,线程如果被中断了,占用的资源还未释放,会出现新的问题。所以线程中断需要谨慎

 

2.线程池中的线程终止

executorService的submit方法的返回值是future对象,通过future对象的cancel方法(参数是ture)可以中断线程。如果线程正在执行,并且可以中断,则会中断。如果线程在队列中,则会剔除队列不再执行

以上是关于线程的终止的主要内容,如果未能解决你的问题,请参考以下文章

线程操作之终止线程

JVM 如何终止守护线程?或如何编写优雅终止的守护线程

java 线程的终止与线程中断

并发编程——如何终止线程

Qt中如何设置按钮点击终止线程

并发设计模式 | 两阶段终止模式:如何优雅地终止线程?