「増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編」第四章『Balking』読了
増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編
- 作者: 結城浩
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/03/21
- メディア: 大型本
- 購入: 15人 クリック: 287回
- この商品を含むブログ (206件) を見る
第四章『Balking』パターンを読み終わった.ガード条件が満たされていない場合には処理を途中でやめる,一定時間たっても処理が行われなければ中断する,などようやくマルチスレッドプログラミングっぽくなってきた.
java.util.concurrent.LinkedBlockingQueue
タイムアウト処理を行う場合,wait () を使って処理を待ち,System.currentTimeMills () で取得した経過時間による条件分岐によって,例外処理を throw するなどして実現していた.
しかし java.util.concurrent.LinkedBlockingQueue を使えばもっと手軽にタイムアウト処理を行うことができる.
(158~159 ページ,507~508 ページ)
例えば,キューから要素を取り出す poll メソッドの場合,以下のような使い方ができる.
result = queue.poll ( 30L, TimeUnit.SECONDS );
こう書くと,30 秒以内に要素が得られなかった場合には result に null を返す.
また,キューを追加する offer メソッドでは,
result = queue.offer ( request, 30L, TimeUnit.SECONDS );
とかくと,30 秒以内に要素が追加できなければ false を返す.
一つのスレッドを何度も start () すると
これは1度だけ実行できる.
start メソッドが再度呼び出された場合には,スレッドの起動が二度と起こらないように balk して,例外 IllegalThreadStateException を投げます
(508 ページから引用)
つまり Thread クラスの start メソッドでも balking パターンが使用されている.