1.ThreadPoolExecutor ExecutorServiceのクラスは、インターフェイスやエグゼキュータインターフェイスを実装し、あなたがスレッドプールのcorePoolSize、最大スレッドプールのサイズを設定することができ、AliveTimeは、戦略を拒否しました。共通のコンストラクタ:
ThreadPoolExecutor(corePoolSize int型、int型maximumPoolSize、
ロングkeepAliveTimeが、TimeUnitでユニット、BlockingQueueのワークキュー、
のRejectedExecutionHandler
corePoolSize:スレッドの最小数を維持するためにスレッドプール
スレッドの最大数を維持するスレッドプール:maximumPoolSize
keepAliveTimeがを:スレッドプール維持スレッドは、アイドル時間許可(:ときcorePoolSize以上のスレッドプール、生存時間の過剰アイドル状態のスレッドの数説明)
単位:単位で許可されるスレッドプール維持スレッドアイドルタイム
バッファキュースレッドプールの使用:ワークキュー
ハンドラ:スレッドプールを拒否するポリシーのタスクを処理するため
の4つの選択肢のハンドラがあります。
戦略1:ThreadPoolExecutor.AbortPolicyは()
java.utilのをスローします。
小さな質問:業績の作者は、まだ第三のラインの下の例外が登場する理由についていくつか質問があります
戦略2:ThreadPoolExecutor.CallerRunsPolicy
executeメソッドの呼び出し元のスレッドに直接拒否されたタスクを実行します拒否されたタスクのハンドラ、executorがタスクが破棄され、シャットダウンされた場合。次のように:( 少し疑問を:業績の著者で、このようなプール-1-スレッド-7など多くの質問が、まだありますがされて実行されている連続的に)なぜこれは、何回も登場?
解説:上記zxai
戦略3:のRejectedExecutionHandler
新新ThreadPoolExecutor.DiscardOldestPolicy();
この演算結果は、100が実行されるすべてのスレッドを持っていないでしょう。:次のようにソースコードの処理
:Javaのキューで一般的に使用される方法のいくつかの
)世論調査(削除して、キュー要素の頭部を尋ねるに戻り
説明する:このポリシーは、それが実行するタスクで、最も古い要求を破棄し、再度提出しようとします現在のタスク。(Q:キューの最初の要素がポップアップ表示されるのはなぜですか?回答:FIFOキューので、キュー要素のヘッドは確かに最も古い要求であり、かつDiscardOldestPolicy戦略は最も古い要求を廃止することですので、この機会(同等の肉を食べて口の中の最も古い要求をつかむためには)スレッドプールのスレッド内に新しい電流(スレッド・プールが満杯になった今回の提出を左に不満ならば、キューが、フルである、ではないでしょうポリシーを拒否しました!))
戦略4:ThreadPoolExecutor.DiscardPolicy
拒否されたタスクのハンドラは、デフォルトで拒否されたタスクを破棄します。
営業結果は、すべての100個のスレッドを実行しません。
ソースはスレッド上で動作していない事実であり、次のとおりです。