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を呼び出すというように振る舞っていると考えられる.