Runnable 中的中断也会中断其他线程吗?

Interrupt in Runnable interrupts other threads as well?

我有一个 class MyRunnable 实现了 Runnable 接口。 class 是从主线程实例化的,如下所示:

MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread( myRunnable );
thread.start();

MyRunnable 实现一个 stop() 方法,该方法停止线程并在当前线程上调用 interrupt()

public void stop()
{
  LOG.info( "Stopping" );
  this.runService = false;  // reset running flag in order to stop the while-loop
  Thread.currentThread().interrupt();   // interrupt any blocking operations
}

但是,中断线程会导致一些我无法理解的重大问题。我注意到不仅这个线程被中断了,其他所有线程也被中断了,包括主线程!这导致数据库连接中断,与此线程等没有任何关系。当我删除中断调用时,一切都按预期工作。

我认为创建/启动/停止 Runnable 非常简单,但也许我做错了什么?

您可能正在从主线程调用 myRunnable.stop()。这将导致 Thread.currentThread().interrupt() 简单地中断主线程。

您不应假设该方法中的调用线程。如果您的意图是实际中断为执行您的可运行对象而实例化的线程,您应该以某种方式将 thread 引用传递给您的 Runnable 实现并调用 thread.interrupt() 而不是弄乱 currentThread().