シンプルなスレッドプールを作成しますThreadPoolTaskExecutor

1.作成します。

ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);//核心线程大小
        executor.setMaxPoolSize(10);//最大线程大小
        executor.setQueueCapacity(100);//队列最大容量
        executor.setKeepAliveSeconds(3000);//存活时间
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());//拒绝执行时如何处理

2.

executor.submit(new ThreadDemo());//或者executor.execute(new ThreadDemo());
// ----------------------------
public class ThreadDemo implements Runnable {
     @Override
     public void run() {
         //业务处理
     }
 }

ここでは、ここで終了している場合に使用し、いくつかの命令があります

3.実行

3.1プール内のスレッドがアイドル状態であるが、タスクを処理するための新しいスレッドを作成した場合でも、この時点でプール内のスレッドの数は、corePoolSizeよりも小さい場合に追加されます。

3.2この時点でプールcorePoolSize内のスレッドの数に等しいが、ワークキューバッファのキューが満杯でない場合、タスクは、バッファ・キューに置かれます。

3.3今回はプールcorePoolSize内のスレッドの数よりも大きい場合、タスクが追加された処理するための新しいスレッドを構築し、ワークキューバッファのキューが満杯であり、プール内のスレッドの数がmaxPoolSize未満です。

4.4今回はプールcorePoolSize内のスレッドの数よりも大きい場合、ワークキューバッファのキューが満杯であり、プール内のスレッドの数は、ポリシーを指定されたタスクハンドラによって処理maxPoolSizeに等しいです。それは次のとおりです。優先処理タスクは次のとおりです。コアスレッドcorePoolSize、タスクキューのワークキュー、最大スレッドmaximumPoolSize、3つのすべてがいっぱいであれば、使用ハンドラ処理タスクが拒否されました。

プール内のスレッドの数がcorePoolSizeよりも大きい場合に、アイドル時間がスレッドkeepAliveTimeがを超えた場合、スレッドが終了します。このように、スレッドプールを動的にプール内のスレッドの数を調整することができます。

4.ごみ処理

4.1 ThreadPoolExecutor.AbortPolicy:RejectedExecutionExceptionタスクを破棄し、例外をスロー
4.2 ThreadPoolExecutor.DiscardPolicy:タスクを破棄しますが、例外をスローしませんが。
4.3 ThreadPoolExecutor.DiscardOldestPolicy:キューの先頭を捨てます。
4.4 ThreadPoolExecutor.CallerRunsPolicy:呼び出し側でタスクを処理します。

5.違いを提出し、実行します

  1. 受信したパラメータは同じではありません
  2. 返します値を提出し、戻り値を実行していません
  3. 提出例外処理(Future.get())

おすすめ

転載: blog.csdn.net/weixin_34268579/article/details/90879474
おすすめ