2

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

  1. 使用布尔标志。一旦标志发生变化,我们就可以在 run 方法中破坏那里的代码。
  2. 使用中断方法。

我的问题是为什么要避免使用布尔标志来优雅地关闭线程,当我运行示例程序时它运行良好。

4

1 回答 1

5

但是,flag 没有任何问题boolean

  • 您需要记住同步/可见性(至少要挂上volatile标志)

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

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

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

于 2012-04-07T17:56:44.400 回答