>>74
俺はArrayBlockingQueue#take()とかよく使う。
1.メインスレッド側のメンバー定数としてArrayBlockingQueueのインスタンスを作成
2.バックグラウンドスレッドはコンストラクタの引数とかでキューの参照を受け取り、メンバー変数に格納
3.スレッド処理が終了した時点でArrayBlockingQueue#offerとか使って処理結果をメインスレッドにPUSH
4.メインスレッドはArrayBlockingQueue#take()で待機していて、処理結果が返ると直ちに復帰

実際はtakeとかofferはいろいろバリエーションがあるから無限滞留とか結果渡しそびれが無いように良く考える。