私は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の作成/開始/停止は非常に簡単だと思っていましたが、何か間違ったことをしていますか?
どのスレッドから 'stop()'メソッドを呼び出していますか? –
メインスレッドから。 –
'interrupt()'は以前に作成したものだけでなく、あなたが呼び出すスレッドを中断します。 –