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

时间:2016-09-09 09:49:11

标签: java interrupt runnable

我有一个实现MyRunnable接口的类Runnable。该类是从主线程实现的,如下所示:

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非常简单,但也许我做错了什么?

1 个答案:

答案 0 :(得分:3)

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

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