ArrayBlockingQueue は、キューがいっぱいの場合はプロデューサー スレッドをブロックし、キューが空の場合はコンシューマー スレッドをブロックします。
このブロッキングの概念は、マルチスレッドの考え方そのものに反するのではないでしょうか? 「メイン」スレッドがあり、すべての「ロギング」アクティビティを別のスレッドに委任したいとします。したがって、基本的にメインスレッド内で、Runnable を作成して出力をログに記録し、Runnable を ArrayBlockingQueue に配置します。これを行う全体的な目的は、高価なロギング操作で時間を無駄にすることなく、「メイン」スレッドをすぐに返すことです。
ただし、キューがいっぱいの場合、メイン スレッドはブロックされ、スポットが利用可能になるまで待機します。それで、それはどのように私たちを助けますか?