私はrunnableインターフェイスを実装してクラスを作成してから、自分のプロジェクトの他のクラスに多くのスレッド(ほぼ10個)を作成しました。
これらのスレッドのいくつかを停止するには?runnableインターフェイスを実装して作成したスレッドを停止する方法はありますか?
答えて
最も簡単な方法はtrue
を返すようにThread.currentThread().isInterrupted()
の原因となりますし、またどこスレッド、特定の状況下でInterruptedException
を投げる可能性がある、それinterrupt()
にある:
ただし、ここでの回避策など、より詳細な情報を得ることができますあなたがCを必要とするrun()
メソッド内などの例Thread.sleep()
、otherThread.join()
、object.wait()
ため、
をを待っていますその例外を処理したり、定期的にThread.currentThread().isInterrupted()
の値をチェックして何かを行う(例えば、中断する)ことができます。
注:Thread.interrupted()
がisInterrupted()
と同じように見えるが、それは厄介な副作用があります:isInterrupted()
を呼び出すことはないのに対し、interrupted()
を呼び出すは、interrupted
フラグをクリアします。
その他の中断のない方法では、実行中のスレッドが監視するフラグ「stop」(volatile
)を使用します。
スレッドの途中での停止(強制終了)はお勧めしません。 APIは実際には推奨されていません。 How do you kill a thread in Java?
中止のスレッドを中止するのは良い方法ではありません。より適切な方法は、プログラムでスレッドを返すことです。 Runnableオブジェクトにrun()
メソッドの共有変数を使用させます。スレッドを停止させたい場合は、その変数をフラグとして使用します。
EDIT:サンプルコード
class MyThread implements Runnable{
private Boolean stop = false;
public void run(){
while(!stop){
//some business logic
}
}
public Boolean getStop() {
return stop;
}
public void setStop(Boolean stop) {
this.stop = stop;
}
}
public class TestStop {
public static void main(String[] args){
MyThread myThread = new MyThread();
Thread th = new Thread(myThread);
th.start();
//Some logic goes there to decide whether to
//stop the thread or not.
//This will compell the thread to stop
myThread.setStop(true);
}
}
、Runnableインタフェースを実装することによって作成されたスレッドを停止する方法は?
スレッドを停止する方法はたくさんありますが、すべてのスレッドで特定のコードを使用する方法があります。スレッドを停止する一般的な方法はしょっちゅうスレッドをチェックしていることvolatile boolean shutdown
フィールドを持つことです。
// set this to true to stop the thread
volatile boolean shutdown = false;
...
public void run() {
while (!shutdown) {
// continue processing
}
}
あなたはまた、sleep()
の原因となるスレッドを中断wait()
、およびInterruptedException
を投げるためにいくつかの他の方法することができます。 ないは、必ずしもそれがすぐに例外をスローするようになりますそれは、interrupt()
でスレッドを中断すること
public void run() {
while (!Thread.currentThread().isInterrupted()) {
// continue processing
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// good practice
Thread.currentThread().interrupt();
return;
}
}
}
注:また、のようなもので、スレッドの割り込みフラグのためにテストする必要があります。割り込み可能なメソッドにいる場合のみ、InterruptedException
がスローされます。
あなたがRunnable
を実装して、あなたのクラスにshutdown()
メソッドを追加したい場合は、あなたのような独自のクラスを定義する必要があります。
public class MyRunnable implements Runnable {
private volatile boolean shutdown;
public void run() {
while (!shutdown) {
...
}
}
public void shutdown() {
shutdown = true;
}
}
私のクラスでは、フラグ(あなたの例ではシャットダウン)をtrueに設定するメソッドを書いています。しかし、私はスレッドを停止する必要がある他のクラスからこのメソッドにアクセスできません。 – svkvvenky
ええ、あなたは何とかそれを公開する必要があります。私は通常 'public class MyClassはRunnableを実装しています{volatile boolean shutdown; public void run(){if(!shutdown){...}}} '。シャットダウンフラグをセットする 'shutdown()'メソッドを追加することができます。それから、 'new Thread(new MyClass())。start();'を実行して実行します。 – Gray
にThread.currentThreadは()isInterruptedを()見事に取り組んでいます。この コードはタイマーを一時停止するだけです。
このコードは、スレッドタイマーを停止してリセットします。 h1はハンドラ名です。 このコードは、ボタンクリックリスナーの内側に追加されます。 w_h =分w_m =ミリ秒I =カウンタ
i=0;
w_h = 0;
w_m = 0;
textView.setText(String.format("%02d", w_h) + ":" + String.format("%02d", w_m));
hl.removeCallbacksAndMessages(null);
Thread.currentThread().isInterrupted();
}
});
}`
- 1. runnableインターフェイスを実装して作成したスレッドをスリープ()または待機()するにはどうすればよいですか?
- 2. JFrame setVisibility(false)は、作成したすべてのスレッドを停止しますか?
- 3. 現在のスレッド以外の実行中のスレッドをすべて停止する方法はありますか?
- 4. Runnableインターフェイスを実装するクラスのオブジェクトを作成できません
- 5. 停止ボタンを実装する方法
- 6. スレッドを停止し、UIイベントを処理させ、スレッドを「再起動」する方法はありますか?
- 7. 停止スレッドのRunnable不可能
- 8. stdスレッドを安全に停止する方法はありますか?
- 9. サブクラス化によって、クラスのインターフェイス実装が停止しますか?ここ
- 10. 実行後にスレッドを特定し、実行プラグインを使用してGrailsでそのスレッドを停止する方法はありますか?
- 11. Android Java Runnableは停止しません
- 12. C#DLLからクラスのインターフェイスを実装する方法はありますか?
- 13. スレッドを一時停止してから再開する方法はありますか?
- 14. Java Swingボタンを押してスレッドを停止する方法はありますか?
- 15. ユーザーがドラッグを停止したときにボトムシートスクロールを停止する方法はありますか?
- 16. アクセスを停止してクエリを「修正」する方法はありますか?
- 17. Monodevelop Unityでインターフェイス実装テンプレートをオートコンプリートする方法はありますか?
- 18. 既存のタイプにインターフェイスを実装する方法はありますか?
- 19. Handler Runnableを停止するには?
- 20. 内部インターフェイスを実装する型を作成します
- 21. erlangのgen_serverとして実装されたtcp_listenerを停止する方法
- 22. Runnableオブジェクトを使用してスレッドを作成する
- 23. FutureTaskを使用してRunnableインターフェイスから値を返す方法
- 24. 方法は唯一、私はインターフェイスを実装しています
- 25. ページをリフレッシュして一時停止する方法はありますか?
- 26. 実装したメソッドからインターフェイスを返す方法は?
- 27. VB.NETのDebug.Writelineはスレッドの実行を停止しますか?
- 28. ExecutorServiceに送信されたRunnableを停止します
- 29. Runnableインターフェイスをスレッド実装クラスで実装する必要のない単純なJavaのスレッドシナリオ
- 30. Bluetoothで中断しているスレッドを停止する方法
は、実行をキャンセルするが、それを保証するものではありません試みをキャンセルします。 – Rohit