私の知る限り、リンクされたリストと配列の両方が際限なく大きくなる可能性がありますか、それとも間違っていますか? しかし、Executor Service のドキュメントを確認すると、次のように表示されます。
無制限のキュー。無制限のキュー (事前定義された容量のない LinkedBlockingQueue など) を使用すると、すべての corePoolSize スレッドがビジー状態のときに、新しいタスクがキューで待機します。したがって、corePoolSize を超えるスレッドが作成されることはありません。(したがって、 maximumPoolSize の値は何の効果もありません。)
容量が定義されている場合、Unbounded Queue
プロパティは変化しますか?LinkedBlockingQueue
そして、これはのために書かれましたArrayBlockingQueue
:
制限されたキュー。バインドされたキュー (たとえば、ArrayBlockingQueue) は、有限の maximumPoolSizes で使用するとリソースの枯渇を防ぐのに役立ちますが、調整と制御がより困難になる可能性があります。キュー サイズと最大プール サイズは互いにトレードオフされる可能性があります。大きなキューと小さなプールを使用すると、CPU 使用率、OS リソース、およびコンテキスト切り替えのオーバーヘッドが最小限に抑えられますが、スループットが人為的に低くなる可能性があります。タスクが頻繁にブロックされる場合 (たとえば、I/O バウンドの場合)、システムは、他の方法で許可されているよりも多くのスレッドの時間をスケジュールできる場合があります。一般に、小さなキューを使用するには、より大きなプール サイズが必要になるため、CPU のビジー状態が維持されますが、許容できないスケジューリング オーバーヘッドが発生する可能性があり、スループットも低下します。