Next: 16.7 ブロックの原因
Up: 16 スレッドのスケジューリング
Previous: 16.5 自発的な再スケジューリング sleep,yieldメソッド
joinメソッドを用いると,他のスレッドの終了を待つことができるようになる.
以下のように,CalcThreadを開始した後,しばらく何か他のことを行い,それか
らそのスレッドをjoinする.joinが戻ってきた時には,CalcThread.runが終了
していることが保証され,resultには値が設定される.doSomethingElse
が完了した時点で,すでにCalcThreadが終了していれば,joinはすぐ戻る.
class CalcThread extends Thread {
private double result;
public void run() {
result = calculate();
}
public double getResult() {
return result;
}
public double calculate() {
// ... result の値を計算する.
}
}
class ShowJoin {
public static void main(String[] args) {
CalcThread calc = new CalcThread();
calc.start();
doSomethingElse();
try {
calc.join();
System.out.println("result is "
+ calc.getResult());
} catch (InterruptedException e) {
System.out.println("No answer: interrupted");
}
// ... doSomethingElse()の定義
}
joinは,isAlive()によって定義され,
while (isAlive()) wait();
のように書かれていて,スレッドが終了する際に,ランタイムシステムが
notifyAllを呼び出すというように振る舞っていると考えられる.
generated through LaTeX2HTML. M.Inaba 平成18年5月7日