在Java中中断线程

在Java中中断线程,java,multithreading,Java,Multithreading,我想优雅地关闭线程。我在网上看到很多代码,这里有查询。 我认为关闭有两种方法 使用布尔标志。一旦标记更改,我们可以在run方法中中断代码 中断方法的使用 我的问题是,为什么避免使用布尔标志优雅地关闭线程,当我运行示例程序时,它运行得很好。布尔标志没有问题,但是: 您需要记住同步/可见性(至少将volatile放在标志上) 为什么要在已经实现(中断)的情况下添加额外的标志 其他库/容器可能会试图中断您的线程(毕竟,它们不知道您的标志!),因此您仍然需要支持InterruptedException

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

  • 使用布尔标志。一旦标记更改,我们可以在run方法中中断代码
  • 中断方法的使用

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

    布尔标志没有问题,但是:

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

    • 为什么要在已经实现(
      中断
      )的情况下添加额外的标志

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

    • 中断线程还可以中断I/O调用和
      thread.sleep()
      。您的自定义标志无法显示