码迷,mamicode.com
首页 > 编程语言 > 详细

线程的终止

时间:2020-02-08 00:28:14      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:情况下   资源   调用   executor   cut   写文件   停止   退出   ice   

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)可以中断线程。如果线程正在执行,并且可以中断,则会中断。如果线程在队列中,则会剔除队列不再执行

线程的终止

标签:情况下   资源   调用   executor   cut   写文件   停止   退出   ice   

原文地址:https://www.cnblogs.com/boboshenqi/p/12275063.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!