ワークフローJAVAスレッドプールは一種どのようにでしょうか?

 

 

(アイドル状態のスレッドを含む)プール内のスレッドの現在の数が少ないcoolPoolSizeより、タスクを実行するためのスレッドを作成した場合、ジョブは、送信または実行方法でスレッドプールに提出される1。

プール2以上coolPoolSize内のスレッドの現在の数は、タスクは、待ちキューに追加された場合。

3タスクがチームになることができない場合は、待ちキューは、プール内のスレッドの現在の数が少ないmaximumPoolSizeを超える場合、このタスクを実行するために、一時的なスレッド(非コアスレッド)を作成し、いっぱいです。

プール内のスレッドの現在の数が等しいmaximumPoolSizeを持っている場合は4は、このタスクは、ポリシー処理を実現することを拒否し、後で具体的な戦略を実装することを拒否して詳細に説明するよれば、この時点で行うことができません。

注:プール内のスレッドの数がcoolPoolSizeよりも大きい場合には、時間をかけてkeepAliveTimeがアイドル状態のスレッドが出てリサイクルされます。非中核糸リサイクル、コアスレッドは、一般的に回収されません。allowCoreThreadTimeOut(真の)場合は、コアスレッドがkeepAliveTimeがアイドル時間後に回収されます。

キューが空の場合は、タスクに取られるまで、タスクキューは、ブロッキングキューで、キューは、タスクを実行するためのタスクを実行中のスレッドを取るために行くだろう、スレッドがブロックされます。

 

私たちは、このシナリオがあることを前提としています。

corePoolSizeは:1
mamximumPoolSize:3
keepAliveTimeが:60代
ワークキュー:ArrayBlockingQueue、バウンド形式のブロッキングキューは、キューサイズは4です
ハンドラ:デフォルトポリシーは、ThreadPoolRejectExceptionをスローします

プールサイズへ= 0スレッドの数を示します。以下は、新しいタスクが時にシーンです

1.来了一个任务,poolSize<corePoolSize 新建一个线程
2.又来了一个任务,poolSize>=corePoolSize ,队列未满,将任务丢入队列等待执行
3.继续添加任务,如果队列满了,而 poolSize < maximum,此时将会新建线程
4.如果继续添加任务,队列满,线程数量达到maximum,则会让handler 去处理。默认抛出异常
5.如果现在线程数量是3,但是都处于空闲状态,空闲超过60s 之后,其中2个线程就会被回收,保留一个(coolPoolSize=1)

所以当任务来临时的处理顺序是这样的:

首先创建 corePoolSize 线程
然后丢到队列等待
队列满,新建maximum线程
继续满,handler 处理

 

おすすめ

転載: www.cnblogs.com/gaopengpy/p/12149060.html