ウェイトセットとエントリセット

第四章では Balking パターンについて解説されている.中でもここでは,一定時間過ぎれば処理を待たずに中断するというタイムアウトパターンについて学んでいる,

処理待ちという観点で言うと,スレッドには以下の 2 状態が存在する.

(1) synchronized でロックを取ろうとしてブロックしている状態
(2) wait を実行してウェイトセットの中にいる状態
(155 ページより引用)

この 2 状態はスレッドが活動していない点では似ているが,大きく異なる部分もある.

synchronized でロックを取ろうとしてブロックしている状態

(1) の状態にあるスレッドをタイムアウトさせる方法はありません.これは,synchronized メソッドにも synchronized ブロックにも,タイムアウトの値を指定する方法が無いことからもわかります.
(155 ページより引用)

とあるように,この状態からタイムアウトさせることはできない.

また,この状態にいるスレッドを「エントリセット (entry set) にいると表現し,ウェイトセットと対比させて説明されている.

wait を実行してウェイトセットの中にいる状態

これをタイムアウトさせるには,一定時間経過後に TimeoutException を投げるようなプログラムにすればいい.これは 153~154 ページで使用しているサンプルプログラムで説明されている.
また interrupt を実行すると Interrupted Exception が投げられるので,それを使用するのもよし.