ホームページ  >  記事  >  Java  >  Javaスレッドプールパラメータの意味は何ですか

Javaスレッドプールパラメータの意味は何ですか

PHPz
PHPz転載
2023-05-06 09:22:141059ブラウズ

スレッド プール テクノロジは、Java マルチスレッド開発でよく使用されます。この記事では、Java スレッド プールを作成するときの 7 つのパラメータについて詳しく説明します。

Javaスレッドプールパラメータの意味は何ですか

ソース コードからわかるように、スレッド プールのコンストラクターには 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 メソッドが呼び出し元のスレッドで直接実行されます。スレッド プールがシャットダウンされた場合、タスクは直接放棄されます。

②AbortPolicyJavaスレッドプールパラメータの意味は何ですか

このポリシーでは、タスクは直接破棄され、RejectedExecutionException がスローされます。

#③DiscardPolicyJavaスレッドプールパラメータの意味は何ですか

このポリシーでは、タスクは直接破棄され、何も行われません。

#④DiscardOldestPolicy

Javaスレッドプールパラメータの意味は何ですかこのポリシーでは、キューに入った最も古いタスクを破棄し、拒否されたタスクをキューに入れようとします

以上がJavaスレッドプールパラメータの意味は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。