zoukankan      html  css  js  c++  java
  • 关闭线程的一些问题

      Thread.stop方法,虽然它确实停止了一个正在运行的线程,然而,这种方法是不安全也是不受提倡的,不应该使用stop方法来关闭Java的线程。

      正确的方法应该是设置volatile boolean stop = false;,这样所有线程可以及时发现stop值的变化,线程运行的过程中周期性或关键点检查stop值,当发现stop被其他线程置为了true时,终止线程的运行。

      但是上面的方法也有不完善的地方,当线程wait、sleep等情况下将无法判断stop的值,也就是说线程可能会永远的阻塞下去。所以希望关闭线程,除了周期性或关键点检查stop值,还要调用Interrupt来中断阻塞状态的线程。

      即使做了如上的操作,线程可能也不会立即终止,需要等待操作系统调度的结束。

      ExecutorService的shutdown是缓慢关闭线程池,无法加入新的任务,shutdownNow是希望立即关闭线程池,shutdownNow中就调用了interrupt,但是调用的是interrupt,也不会立即关闭。

      ExecutorService不调用shutdown,将会在所有任务完成后1分钟关闭线程池。

      

      

  • 相关阅读:
    NOIP普及组2003经验总结
    Day6上午 DP练习题
    Day4 图论
    Day3 数据结构
    使用ettercap进行dns欺骗和获取目标浏览的图片
    flask入门
    攻防世界-web-unserialize3
    数据结构课设作业-----飞机订票系统
    bugku NaNNaNNaNNaN-Batman
    it's a test
  • 原文地址:https://www.cnblogs.com/lnlvinso/p/4738105.html
Copyright © 2011-2022 走看看