我有一个实现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非常简单,但也许我做错了什么?
答案 0 :(得分:3)
您可能正在从主线程中调用myRunnable.stop()
。这将导致Thread.currentThread().interrupt()
简单地中断主线程。
你不应该假设该方法中的调用线程。如果您的意图是实际中断为执行runnable而实例化的线程,您应该以某种方式将thread
引用传递给Runnable
实现并调用thread.interrupt()
而不是弄乱currentThread()
}。