线程的终止
Posted boboshenqi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程的终止相关的知识,希望对你有一定的参考价值。
1.Thread的终止
首先,不建议使用Thread类的stop方法,因为会强制释放线程使用的资源,例如锁、文件等,会出现令人意想不到的问题。Java中Thread类提供了interupt方法来设置线程的中断标志位使线程停止,但是interrupt方法并不是万能的,只能在有限的情况下中断线程:
- 线程处于等待、条件等待时。例如在线程中调用了lock.wait()、Thread.sleep()等方法
- nio中会能够检测中断标志位的方法
- 在线程中不断检测了中断标志位。例如在while循环中调用isInterrupted方法检测是否设置了中断标志位,如果设置了中断标志位,则退出线程
但是像大多数情况,例如线程在读写文件等IO耗时的工作是不会处理中断标志的,也不会中断线程。在这种情况下,线程如果被中断了,占用的资源还未释放,会出现新的问题。所以线程中断需要谨慎
2.线程池中的线程终止
executorService的submit方法的返回值是future对象,通过future对象的cancel方法(参数是ture)可以中断线程。如果线程正在执行,并且可以中断,则会中断。如果线程在队列中,则会剔除队列不再执行
以上是关于线程的终止的主要内容,如果未能解决你的问题,请参考以下文章