アリはExecutorでスレッドプールを作成しないようにするマニュアルの開発について説明しました

執行直接JDKが私たちを提供しているのエグゼキュータ・スレッド・プールの方法を使用して呼び出すことができるユーティリティクラスです。


Executors.newCachedThreadPool(); // 创建可缓存的线程池

Executors.newFixedThreadPool(1); // 创建固定大小的线程池

Executors.newSingleThreadExecutor(); //  创建单线程池

- newCachedThreadPoolは、スレッドプールのスレッド数が実行されるタスクの数よりも大きい場合、リソースが60秒後にスレッドをオフ回復される、キャッシュされたスレッドプールです。

 場合は、スレッドプールに相当する量を増加させるタスクは、タスクを実行するスレッドを作成します。

newCachedThreadPoolソース

- 固定サイズのスレッドプール、受信パラメータは、スレッドの最大数を設定するために使用されている状態がタスクキューにタスク内に配置される場合newFixedThreadPoolは、スレッドがこの時点で実行されます。

newFixedThreadPoolソース

- newSingleThreadExecutorは、シングルスレッドのスレッド・プールで、このスレッドプールのスレッドが完了するために基づいて提出さを保証することができます。

newSingleThreadExecutorソース

上記のソースコード解析を通じて、我々は、彼らがLinkedBlockingQueueのタスクキューを使用しているnewFixedThreadPoolとnew​​SingleThreadExecutor方法を発見し、デフォルトのサイズLinkedBlockingQueueはInteger.MAX_VALUEです。newCachedThreadPoolは、スレッドプールサイズInteger.MAX_VALUEの中で定義されます。

アリはエグゼキュータの使用を禁止する理由は、スレッドプールにInteger.MAX_VALUEの要求キューの長さFixedThreadPoolとSingleThreadPoolで作成するので、OOMを起こし、多数の要求を蓄積する可能性があります。

CachedThreadPoolはOOMを得、多数のスレッドを作成することができ、スレッドの数にInteger.MAX_VALUEを作成することができました。

オリジナル:https://segmentfault.com/a/1190000021657959

公開された740元の記事 ウォン称賛65 ビュー10万+

おすすめ

転載: blog.csdn.net/qq_41723615/article/details/104365363