私は Java でのマルチスレッド化が初めてで、スレッドを停止する方法がわかりません。ArrayList
止めたいスレッドがあります。ここに私のコードのスニペットがあります:
class PrimeThread implements Runnable {
public void run() {
while(flag) {
//do some stuff
}
}
public void cancel() {
flag = false;
}
...
}
Class MainClass {
public static void stopPrimeThreads() {
for(int i=0; i<primeThreadList.size(); i++) primeThreadList.get(i).cancel();
}
}
flag
変数を に設定してスレッドを停止しようとしましたfalse
。flag
変数はvolatile boolean
、クラス自体で宣言されています。また、外側のクラス変数をセンチネルとして使用しようとしましたが、それも機能しませんでした。また、非volatile
変数は仕事をしません。非推奨のstop()
メソッドを使用すると、必要な動作が得られますが、非推奨のメソッドは使用したくありません。この問題を解決する方法を知っている人はいますか? 基本的な何かが欠けていますか?前もって感謝します。