用Java中断线程

use*_*721 2 java multithreading

我想优雅地关闭线程.我在互联网上看到很多代码,并在这里查询.我认为有两种方法可以关闭.

  1. 使用布尔标志.一旦标志chnages我们可以在run方法中打破代码.
  2. 使用中断方法.

我的问题为什么避免使用布尔标志来优雅地关闭线程,当我运行示例程序时,它进展顺利.

Tom*_*icz 5

boolean然而,旗帜没有错:

  • 你需要记住同步/可见性(至少放在volatile旗帜上)

  • 为什么在一个已经实现的时候添加一个额外的标志(interrupted)?

  • 其他库/容器可能会试图中断你的线程(毕竟,他们不知道你的标志!)所以你仍然需要支持InterruptedException和/或isInterrupted()标记

  • 中断线程也可以中断I/O调用Thread.sleep().你的自定义标志不能