banner
RustyNail

RustyNail

coder. 【blog】https://rustynail.me 【nostr】wss://ts.relays.world/ wss://relays.world/nostr

ThreadPoolExecutor

ThreadPoolExecutor は、タスク(task)を実行するためのサービス(ExecutorService)です。通常、タスクはスレッドプール内のスレッドで実行されます。

ThreadPoolExecutor は、異なるスレッドプールを使用することができます。異なる作成方法を使用しています:Executors.new****ThreadPool()

  • newCachedThreadPool:制限なしで、毎回新しいスレッドが作成されます。
  • newFixedThreadPool:固定されたスレッドサイズです。
  • newSingleThreadExecutor:単一スレッドのスレッドプールです。

コア / 最大プールサイズ#

新しいタスクが提出されると(execute(runnable))、MaximumPoolSizeCorePoolSizeの 2 つのパラメータの設定に基づいてタスクの宛先が決定されます。

実行中のスレッド数がCorePoolSizeよりも大きく、MaximunPoolSizeよりも小さく、かつ現在の待ち行列がいっぱいの場合、スレッドが作成されます。

つまり、これらの 2 つのパラメータを同じ値に設定すると、FixedThreadPool が作成されます。MaximumPoolSizeを非常に大きな値に設定すると、CachedThreadPool が作成されます。

Keep-alive 時間#

スレッドの生存時間であり、スレッドが作業をしていない場合、この時間が経過するとリリースされます。ゼロにすることはできません。

拒否ポリシー#

コアプールサイズと最大プールサイズ、およびキューがすべて満杯の場合、新しく追加されたタスクを処理する必要があります。いくつかの処理方法があります。

  1. execute()のスレッドでタスクを直接実行する。
  2. RejectedExecutionExceptionをスローする。
  3. このタスクを破棄する。
  4. 最も古い(キューの先頭)スレッドを破棄する。

これらは提供される方法であり、RejectedExecutionHandlerインターフェースを自分で実装することもできます。

new RejectedExecutionHandler() {
    @Override
    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {

    }
}

状態の変化#

ライフサイクル全体で、Running、Stop、Shutdown、Tiddying、Terminated の間で変換が行われます。

ステートマシン

内部クラス#

worker#

タスクを実行するためのものです。Service のprivate boolean addWorker(Runnable firstTask, boolean core)は、状態に基づいて worker を作成し、実行します。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。