スレッドプール(iii)の境界ブロッキングキュースレッドプール値の値(2)重要な設計上のスループットの値

最後に、スレッドプールの値(b)は重要であるスループットのデザインは受信キュー、私たちは36に変更し、ブロッキングキューを見てみましょう無限のLinkedBlockingQueueを使用します。

 

輸入java.util.concurrentの*。; 

/ ** 
 * https://www.cnblogs.com/silyvin/p/11806859.html 
 * https://www.cnblogs.com/silyvin/p/11875907.html 
 * 2019年11月6日にジョイスによって作成されます。
 * / 
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.SECONDS)
@Threads(40)
@state(Scope.Thread)
パブリッククラスMyThread { 

    プライベート静的最終ThreadPoolExecutor MQ_POOL =て、新しいThreadPoolExecutor(
            4、4、0L、TimeUnit.MILLISECONDS 、新しいLinkedBlockingQueue <>(36)、
            新しいDefaultThreadFactory)( "mq-"真)。
    
    パブリック静的クラスアクションが実装呼び出し可能<整数> { 

        @Override 
        パブリック整数コール()は例外をスロー{
            int型、A = 0; 
            Thread.sleep(2000); 
            System.out.println(A)。
            返します。
        } 
    } 

    @Benchmark 
    公共の静的な無効テスト(){ 
        試み{ 
            フューチャー<整数>私は= MQ_POOL.submit(新しいアクション()); 
            i.get(); 
        }キャッチ(RejectedExecutionException電子){ 
            するSystem.out.println( "放弃" + e.getMessage())。
        }キャッチ(例外e){ 
            e.printStackTrace(); 
        } 
    } 

    公共の静的な無効メイン(文字列[] f)はRunnerException {スロー
        
        // JHM压力测试
        新しいOptionsBuilderを()= OPTオプションは、(MyThread.class.getSimpleName())フォーク(1).warmupIterations(0)。
                .measurementIterations(1).build(); 

        新しいランナー(OPT).RUN(); 

        //自己的压力测试
        MyYali.start(40)。


    } 

    プライベート静的クラスMyYali実装Runnableを{ 

        公共の静的な無効開始(int型THREADCOUNT){ 

            (I = 0のint; I <THREADCOUNT; ++ i)について{ 
                。新しいスレッド(新しいMyYali()))(スタート。
            } 
        } 

        //这个地方如果用1不会出错
        プライベートint型のカウント= 2; 

        @Override 
        ます。public void実行(){ 
            のために(int型私= 0;私は<カウント; ++ I){
                テスト(); 
            } 
        } 
    } 
}

 

2回のJHM自身のサイクルで測定された圧力

キューの長さ36を遮断する複数の、それぞれの出現において、19 1にかなり安定4印刷をあきらめ、放棄する「0」の応答時間28

放棄されていない37のキュー長をブロックすると、20は、応答時間を与えませんでした

 

サイクル数1        

キューの長さ36をブロックする/与えるものではありませんでした 

キューの長さ37をブロックする/与えるものではありませんでした

  

 

放弃タスクjava.util.concurrent.FutureTask@1339fcefがjava.util.concurrent.ThreadPoolExecutor@300fa78cから拒否[ランニング、プールサイズ= 4、アクティブなスレッド= 4、キューに入れられたタスク= 35、完了したタスク= 14]

 

組み合わせて、すべての投機現象によると、キューのブロッキング手書きスレッドの36アウトが拒否された理由を削減し、

 

おすすめ

転載: www.cnblogs.com/silyvin/p/11875907.html