手動でのThreadPoolスレッドプールを実装

執行は、古典的なスレッドプールを作成するには、3つの方法を提供します

ExecutorServiceのスレッドプール= Executors.newFixedThreadPool(INT)

ExecutorServiceのスレッドプール= Executors.newSingleThreadPool()
ExecutorServiceのスレッドプール= Executors.newCachedThreadPool(INT)

我々は1つが仕事で行う最後にそれを使うのか?

答えは、我々は唯一のカスタムの製造に使用することができるということです

図によれば、我々は、彼らが基本となる実装がThreadPoolExecutorで使用する必要があることを見つけることができますが、ブロッキングキューのデフォルトを使用するには、5番目のパラメータはInteger.MAX_VALUEで、です、

2147483647が、これはアンバウンド形式のキューに相当します。すべての要求は、最終的にOOMを起こし、内部に詰めています。

コーディング標準もアリ見ることができます

パラメータ説明

スレッドプールの実装の基礎となる7つのパラメータ
1.corePoolSize:スレッドプール内のスレッドの永久コア番号
2.maximumPoolSize:スレッドプールは、実行スレッドの最大数を収容することができ、この値がより大きいか等しくなければならない1。
3.keepAliveTime:過剰アイドルスレッド生存時間
4.unit:keepAliveTimeが単位
5.workQueue:タスクキューが、タスクがまだ実行されるように提出されていません。
6.threadFactory:ワーカースレッドプールスレッド工場は一般的な使用のデフォルトのためのスレッドを作成するために使用される生成スレッド表す
7.handlerを:ポリシーを拒否する手段をキューがより完全かつワーカースレッドであるか、またはスレッドプール内のスレッドの最大数に等しい場合に

ワークス

スレッドプール基礎となる原則
のスレッドの数がcorePoolSizeよりも大きい場合のブロッキングキューがいっぱいだった後、基本的なスレッドコアは、超過したスレッドは、キューをブロックに転送されます
いくつかのmaximumPoolSizeに容量拡張します。maximumPoolSizeがいっぱいだった後にポリシーがかかります拒否。
アイドル時のスレッドの設定にcorePoolSizeを撤回するための総容量のスレッド生存時間に依存した後、スレッドの数が少ないです、

手動で行います

/ **
*スレッドプールのデモ
* @author tは
*マルチスレッドの使用上の実際の作業は表示されませんスレッドプールのスレッドの作成です
*スレッドプールのOOMが発生する可能性の高い方法を作成するために、従来の方法を使用して
* /
publicクラスThreadPoolDemoを{
    パブリック静的無効メイン(文字列[] args){
        =新規新しいThreadPoolのThreadPoolExecutor ExecutorServiceの(
                2、
                5、
                1、。
                TimeUnit.SECONDS、
                <>(持つ新しい新しいLinkedBlockingDeque 3)。
                Executors.defaultThreadFactory()、
                新しい新しいThreadPoolExecutor.AbortPolicy());
        試み{
            ため(INT I = 1; I <= 10; I ++){
                最終NUM = INT I;
                threadPool.execute(() - > {
                    //印刷スレッド名
                    スレッドの//休止
                    するSystem.out.println( "ID" + NUM + "" +にThread.currentThread ( ).getName()+ "\トンのTransactビジネス");
                });
            }
        }キャッチ(例外e){
            e.printStackTrace();
        }最後に{
            threadPool.shutdown()。
        }
    }
}

業績

注:異なるマシンに基づいてコンフィギュレーション動作の結果が異なっている、最大数(maximumPoolSize +キューサイズ)スレッドが拒否ポリシーをトリガする以上あったが、機械は速度を処理するのでいるはず

私たちが扱うことができる上、その誤りがありません。

9つのスレッドの結果、1秒のポーズスレッド

 

著者:ushowtime

オリジナル住所:https://www.ushowtime.cn/blog/p/50

おすすめ

転載: www.cnblogs.com/ushowtime/p/12502797.html