BlockingQueueについて書かれています。。。
http://d.hatena.ne.jp/m-hiyama/20071214/1197598785
たまにはPipedInputStreamとPipedOutputStreamを思い出してあげてください・・・。
丁度非同期で追加処理を行った結果がループできるイテレータが欲しかったので、BlockingQueueで実装してみました。
http://herringroe.googlecode.com/svn/trunk/herringroe-sandbox/src/main/java/jp/herringroe/commons/util/AsyncIterable.java
ポイントとしては非同期追加処理の終了通知を割り込みで行っている部分です。BlockingQueueは終わりという考え方がないので、いつまでも待ち続けるんですね。そのために大元のスレッドが取得の為にブロッキングしている状態に対して割り込んでやる必要があるのです。
もちろん割り込まなければ実現できない問題ではありません。終了を示すオブジェクトを返してもよいです。サンプルコードを書くとこんな感じで使えます。
上記コードのTaskオブジェクトのprocessメソッドはAcyncIterableの中で別スレッドで動きます。結構便利ではないでしょうか。