JAvaマルチスレッドにおけるThreadPoolExecutorスレッドプールパラメータの理解

1199 ワード

作業中にExecutorsを使用する.newFixedThreadPool(n)スレッドプールを作成する場合、アリババjava開発マニュアルはスレッドプールを手動で作成するように要求する.ヒント情報は;スレッドプールの実行ルールをより明確にし、リソースの消費リスクを回避します.スレッドプールを手動で作成する方法:
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue) 
  • corePoolSize:コアスレッド数
  • maximumPoolSize:最大スレッド数
  • keepAliveTime:非コアスレッドであり、このパラメータが設定する時間を超えて動作しない場合、allowCoreThreadTimeOut=trueを設定すると、コアスレッド
  • に作用します.
  • workQueue:スレッドキューラインプールの実行規則:新しいタスクはメソッドexecute(java.lang.Runnable)でコミットされます.(つまり、スレッドを開く)の場合、実行するスレッドがcorePoolSizeより少ない場合、スレッド数は開いているスレッド数である.すなわち、新しいタスクの発行である場合、新しいスレッドは他の補助スレッドが空いていてもよい.実行するスレッドがcorePoolSizeより多く、maximumPoolSizeより少ない場合、スレッドはスレッドキューに入り、キューがいっぱいの場合にのみ新しいスレッドが作成される.maximumPoolSize設定を基本的な無境界値(Integer.MAX_VALUEなど)では、プールは任意の数の同時タスクに適応できます.ヒント:Executorsを使用してスレッドを作成する場合、コアスレッド数の最大スレッド数は入力パラメータに等しく、keepAlivetimeは0であり、workQueueキューの長さはデフォルトでInteger.MAX_VALUEであるintegerの最大値です.したがって、作成するスレッド数がスレッドプール数よりはるかに大きい場合、キューブロックに入ります.キューはIntegerをブロックすることができます.MAX_VALUEスレッドにより、メモリリソースが消費されます.