1. CachedThreadPoolでOOM例外が発生するのはなぜですか?
作成されたスレッドが多すぎ、メモリがオーバーフローしました
2.タスクをスレッドプールに追加する場合の処理フローを教えてください。
最初のキューをブロックするタスクは拒否戦略の種類を達成することである場合は、完全でない場合、その後、タスクキューのブロッキングに追加するスレッドのセット、見ることがいっぱい、いっぱいであるかどうかを判断する
タスクの数は、スレッドのコア数よりも大きいかどうか判断するために一緒に、より大きなを作成キューの場合、スレッドの最大数は最大数を超えず、スレッド数がアイドル時間を超えると、
スレッド数はコアスレッド数に減らされます。
3.スレッドプールの拒否戦略について話す
最初のタイプ:新しいタスクを直接破棄する
2番目のタイプ:新しいタスクを直接破棄して例外をスローする
3番目のタイプ:最も古いタスクを破棄して新しいタスクを追加する
4番目のタイプ:現在のスレッドを直接使用してタスクを実行する
4.スレッドプールのコア属性は何ですか?
コアスレッドの数、スレッドの最大数、スレッドのアイドル時間、ブロッキングキュー、拒否戦略など。
5. JDKが提供する4種類のスレッドプールは何ですか?
最初のタイプ:シングルスレッドスレッドプール(newSingleThreadExecutor)、シングルトンモード、スレッドは異常であり、スレッドを再作成します
。2番目のタイプ:固定スレッド番号スレッドプール(newFixedThreadPool)。3
番目のタイプ:時限スレッドプール(newScheduledThreadPool)遅延タスクを実行できる、戻り値を含むタスクを実行できる
6. JDKが提供するこれらのスレッドプールの何が問題になっていますか?
固定数のスレッドプールと単一のスレッドスレッドプールが多数のタスクを蓄積する可能性があり、その結果OOM
キャッシュスレッドプールが生成され、時限スレッドプールが多数のスレッドを作成する可能性があります。その結果、OOMが
4番目になります:キャッシュスレッドプール(newCachedThreadPool)
7.スレッドプールのサイズを設計する方法は?
これは、タスクタイプがCPU集約型かIO集約型かによって異なります。CPU集約型の場合は、CPUコア数+ 1スレッドに
設定されます。IO集約型の場合は、IO操作がCPUを占有しないため、次のように設定できます。 CPU + 1スレッドの数を2倍にします。
8.スレッドプールの下部を実装する方法を知っていますか?どのようなデータ構造が使用されていますか?
9.スレッドプールを作成する場合、何を作成し、どのモジュールをそこに置きますか?
10.スレッドプールに新しいスレッドを作成する方法
11.単純なスレッドプールを作成する方法は?
(最初に
、コアスレッドの最大数、タスクブロックキュー、スレッドコレクション、スレッドのアイドル時間など、いくつかのコア属性を持つスレッドプールクラスを作成します)
最初のステップ:ウォームアップ、コンストラクターによるコアスレッドの作成および開始、そしてブロッキングキューLinkedBolockingQueueの作成があります。2
番目のステップ:タスクを追加し、executeメソッドを作成し、オファーを使用してタスクをブロッキングキューに追加します
。3番目の部分:タスクを消費し、ワーカースレッドの内部クラスを作成し、whileループを通じてポーリングメソッドを継続的に呼び出し
て取得します。タスク、runnableのrunメソッドを呼び出してタスクを実行します。
12.スレッドプールを使用する理由
スレッドが頻繁に作成および破棄される場合、CPU消費は非常に大きく、スレッドの再利用の使用を検討する必要があります
13.スレッドプールを使用する利点は何ですか?
スレッドを再利用して、スレッドの作成と破棄のCPU消費を削減します。また、スレッドの統合管理もあります。