マルチスレッドスレッド、メッセージごとのデザインパターン

アイデア:スレッドを作成するための要求

メッセージメッセージ本文

パッケージcom.dwz.concurrency2.chapter16。

パブリック クラスメッセージ{
     民間 最終文字列値。

    パブリックメッセージ(文字列値){
         この .VALUE = 値。
    } 

    パブリック文字列のgetValue(){
         戻り値。
    } 
}

ハンドラの単純なバージョン(スレッドを作成するには、いくつかの要求があります)

パッケージcom.dwz.concurrency2.chapter16。
輸入java.util.Randomの。
パブリック クラスMessageHandlerの{ 民間 最終 静的ランダムランダム= 新しいランダム(のSystem.currentTimeMillis()); 公共 無効要求(メッセージメッセージ){ 新しいスレッド(() - > { String値 = message.getValue(); 試み{ のThread.sleep(にRandom.nextInt( 1000 )); System.out.printlnは(「メッセージがされます「+によってハンドル。にThread.currentThread()のgetName()); } キャッチ(InterruptedExceptionある電子){ e.printStackTrace(); } 。}))(開始。 } }

ハンドラ改良版(スレッドプールのスレッドを使用して作成)

パッケージcom.dwz.concurrency2.chapter16。

輸入java.util.Randomの。
輸入java.util.concurrent.Executor;
輸入java.util.concurrent.ExecutorService;
輸入java.util.concurrent.Executors。

パブリック クラスMessageHandlerの{
     民間 最終 静的ランダムランダム= 新しいランダム(のSystem.currentTimeMillis()); 
    
    民間 最終 静的エグゼキュータ= Executors.newFixedThreadPool(5 )。
    
    公共 ボイド要求(メッセージメッセージ){ 
        てexecutor.execute(() - > { 
            文字列値= message.getValue()。
            してみてください{ 
                のThread.sleep(にRandom.nextInt( 1000年)); 
                System.out.println( +にThread.currentThread()のgetName()+ "" + "メッセージはによってハンドルされます。" 値)。
            } キャッチ(InterruptedExceptionある電子){ 
                e.printStackTrace(); 
            } 
        })。
    
    公共 ボイドシャットダウン(){ 
        ((ExecutorServiceの)エグゼキュータ).shutdown(); 
    } 
}

テスト

パッケージcom.dwz.concurrency2.chapter16。

輸入java.util.stream.IntStream; 

パブリック クラスPerThreadClient {
     公共 静的 ボイドメイン(文字列[]引数){
         最終 MessageHandlerのハンドラ= 新しいMessageHandlerの()。
        IntStream.rangeClosed( 0、10).forEach(I - > handler.request(新しいメッセージ(String.valueOf(I))))。
        handler.shutdown(); 
    } 
}

 

おすすめ

転載: www.cnblogs.com/zheaven/p/12164222.html