synchronized void doWhenCondition() { while (!condition) wait(); ... conditionがtrueの時に処理すべきことを行う. }waitメソッドの引数に関しては, wait(long timeout), wait(long timeout, int nanos) という 形の引数をとり,timeoutミリ秒+nanosナノ秒後に自動的にwaitから戻ってくる ことになる.wait()はtimeoutが0で,通知がなされるまでずっと待ち続けるという ことになる. タイムアウト期間が終わることによってwaitが完了した場合には, スレッドに通知されるだけで,タイムアウトの発生を示すものではない. スレッドがタイムアウトしたかどうかを知る必要がある場合には, スレッド自身で経過時間を調べる必要がある. タイムアウトを使用するのは,条件が満たされるべきところでなんらかの理由で 満たされない状況から回復できるように防御的に利用したいときである.