別のスレッドからのスレッドの実行を一時停止しようとすると問題が発生します。私はJavaドキュメントといくつかのスタックオーバーフローの例を読みましたが、まだ少し迷っているようです.
多くのケースは私のものと同じです。ユーザーへの応答性を維持できるように、いくつかの作業を行うスレッドを生成する GUI があります。ある時点で、ユーザーは次のステートメントを実行する前にワーカー スレッドを停止することが望ましいことを行います。そしてしばらくしてから、その作業を続けます。
wait
とのnotify
ドキュメントを読みましたがThreads
、これが上記の質問 (?) に対する短い回答のようです。
そして、私の IDE (netbeans) が教えてくれることから、同期ブロック内で呼び出しwait
を行う必要があります。notify
これが、開始の一時停止ボタンが押されたときの JFrame の内容です。automator
一時停止したいThread
オブジェクトです。static final
私のJFrameのように宣言されています。firstRunDone
は、 が初めてm_jbStartPause
押されたときの単なるフラグであるため、automator
を開始しても通知されません。
OnStartPauseButton()
{
synchronized(automator)
{
if(!running)
{
this.m_jbStartPause.setText("Pause");
running = true;
if(firstRunDone)
automator.notify();
else
automator.start();
firstRunDone = true;
}
else
{
this.m_jbStartPause.setText("Start");
running = false;
try { automator.wait(); } catch (InterruptedException ex) {}
}
}
}
私の問題は、最初にスレッドを一時停止しようとしたときです。開始を押すと自動化ツールが起動しますが、一時停止を押すと、JFrame がフリーズし、自動化機能が作業を続行するだけです。
同期を間違って使用していますか? 処理コードはautomator
必要ですか?