スレッド プール テクノロジは、Java マルチスレッド開発でよく使用されます。この記事では、Java スレッド プールを作成するときの 7 つのパラメータについて詳しく説明します。
ソース コードからわかるように、スレッド プールのコンストラクターには 7 つのパラメーターがあります。
これら 7 つのパラメーターは次のとおりです:
corePoolSize: コア スレッドの数。
maximumPoolSize: スレッドの最大数。
keepAliveTime: アイドル スレッドの生存時間。
TimeUnit: 時間単位。
BlockingQueue: スレッド プールのタスク キュー。
ThreadFactory: スレッドを作成するためのファクトリ。
RejectedExecutionHandler: 拒否戦略。
#これら 7 つのパラメータについて、以下で 1 つずつ説明します。
1. corePoolSize スレッド プールのコア スレッド サイズ
スレッド プールは最小数のスレッドを維持し、これらのスレッドがアイドル状態を処理する場合でも、allowCoreThreadTimeOut が設定されない限り破棄されません。ここでのスレッドの最小数は corePoolSize です。
2. minimumPoolSize スレッド プール内のスレッドの最大数
タスクがスレッド プールに送信された後、タスクはまず、アイドル状態で残っているスレッドがあるかどうかを調べます。の場合、タスクはアイドル状態のスレッドに直接渡されます。実行されない場合は、ワーク キューにキャッシュされます (後で紹介します)。ワーク キューがいっぱいの場合は、新しいスレッドが作成され、その後、タスクはワーク キューの先頭から取り出され、処理のために新しいスレッドに渡されます。送信されたタスクはワーク キューの最後に配置されます。スレッド プールは無制限に新しいスレッドを作成するのではなく、maximumPoolSize で指定されるスレッドの最大数に制限があります。
3. keepAliveTime アイドル スレッドの生存時間
スレッドがアイドル状態で、現在のスレッド数が corePoolSize より大きい場合、指定された時間が経過すると、アイドル スレッドは指定どおりに破棄されます。ここで時間は keepAliveTime で設定されます
4. ユニットアイドルスレッド生存時間単位
keepAliveTime の測定単位
5. workQueue ワークキュー
新しいタスクは、送信後、まず作業キューに入り、その後タスクのスケジュール中にタスクがキューから取り出されます。 jdk には 4 つのワーク キューが提供されています:
①ArrayBlockingQueue
FIFO によってソートされた配列ベースの境界付きブロッキング キュー。新しいタスクが到着すると、そのタスクはキューの最後に配置され、境界付き配列によりリソースの枯渇の問題を防ぐことができます。スレッド プール内のスレッドの数が corePoolSize に達し、新しいタスクが到着すると、そのタスクはキューの最後に配置され、スケジュールされるのを待ちます。キューがすでにいっぱいの場合は、新しいスレッドが作成され、スレッド数が maxPoolSize に達すると、拒否ポリシーが実行されます。
②LinkedBlockingQuene
リンク リストに基づく無制限のブロッキング キュー (実際の最大容量は Interger.MAX)、FIFO に従ってソートされます。キューのほぼ無制限の性質により、スレッド プール内のスレッド数が corePoolSize に達すると、新しいタスクは maxPoolSize まで新しいスレッドを作成せずにキューに格納されます。そのため、このワーク キューを使用する場合、パラメーター maxPoolSize は実際には機能しません。
③SynchronousQuene
タスクをキャッシュしないブロッキング キュー。プロデューサーはタスクを投入し、コンシューマーがタスクを取り出すまで待機する必要があります。つまり、新しいタスクが到着すると、キャッシュされませんが、タスクの実行が直接スケジュールされます。使用可能なスレッドがない場合は、新しいスレッドが作成されます。スレッドの数が maxPoolSize に達すると、拒否ポリシーが実行されます。
④PriorityBlockingQueue
優先度を持つ無制限のブロッキング キュー。優先度はパラメーター Comparator によって実装されます。
6. threadFactory スレッド ファクトリ
新しいスレッドの作成時に使用されるファクトリは、スレッド名、デーモン スレッドかどうかなどを設定するために使用できます。 7. ハンドラー拒否戦略
ワークキュー内のタスクが上限に達し、スレッド プール内のスレッド数も上限に達した場合、新しいタスクが投入された場合の処理方法。ここでの拒否ポリシーは、この問題を解決するためのもので、JDK には 4 つの拒否ポリシーが用意されています:
①CallerRunsPolicy
このポリシーでは、拒否されたタスクの run メソッドが呼び出し元のスレッドで直接実行されます。スレッド プールがシャットダウンされた場合、タスクは直接放棄されます。
②AbortPolicy
このポリシーでは、タスクは直接破棄され、RejectedExecutionException がスローされます。
#③DiscardPolicy
このポリシーでは、タスクは直接破棄され、何も行われません。
#④DiscardOldestPolicy
このポリシーでは、キューに入った最も古いタスクを破棄し、拒否されたタスクをキューに入れようとします
以上がJavaスレッドプールパラメータの意味は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。