呼び出し元のスレッドに値を設定するようスレッドに要求するだけです。
呼び出し元のフィールド:
int[] status = new int[NUM_THREADS];
次に、各 Runnable にインデックスを付けて、配列でステータスを設定できるようにします。次に例を示します。
for (int i = 0; i < NUM_THREADS; i++) {
final index = i;
Runnable r = new Runnable() {
void run() {
// have your code stop occasionally to check for any failures
if (>I failed>)
status[index] = 1;
}
}
// start thread using Runnable
}
停止を検出するには、Runnables で arraym の障害をときどきチェックするかboolean
、呼び出し元クラスに別のフラグを追加することができます。
volatile boolean failed = false;
Object lock = new Object();
次に、ランナブルで:
if (<I failed>) {
synchronised (lock) {
failed = true;
}
}
作業中の失敗のチェックは次のようになります。
synchronised (lock) {
if (failed) {
// clean up resources
status[index] = -1; // consider using a separate value for "halted"
return;
}
}