Javaのスレッドを使用--BlockingQueue

オリジナル:転載は元のアドレスを示すhttps://www.cnblogs.com/fanerwei222/p/11871704.html

Javaのスレッドを使用--BlockingQueue

キューがコンテンツの完全でブロッキングした後、彼らは彼女がコードで、表情を作るようになったことを何かがあるまで個人消費の後、目詰まりを開始します:

パッケージconcurrent.blockingqueue。

輸入java.util.concurrent.BlockingQueue;
輸入java.util.concurrent.atomic.AtomicInteger; 

/ ** 
 *生产者
 * / 
パブリック クラスのプロデューサーが実装Runnableを{ 

    / ** 
     *计数器
     * / 
    プライベート 静的のAtomicIntegerのK = 新しいのAtomicInteger(0 ); 
    BlockingQueueのキュー; 

    公共プロデューサ(BlockingQueueのキュー){
         この .queue = キュー。
    } 

    @Override 
    公共 ボイドラン(){
         一方trueに){
             試み{
                 / ** 
                 *キューに放り出さ農産物何かに
                 * / 
                queue.put(プロデュース()); 
            } キャッチ(InterruptedExceptionあるE){ 
                e.printStackTrace(); 
            } 
        } 
    } 

    / ** 
     その後、製造のもの、と出て返す
     * @return 
     * @throws InterruptedExceptionある
      * / 
    プライベートのAtomicIntegerプロデュースの()スローInterruptedExceptionある{ 
        k.addAndGet( 1。); 
        System.out.printlnは("プロデューサーは、物事の生産を開始..." + K);
         戻り値のK; 
    } 
}
パッケージconcurrent.blockingqueue; 

インポートjava.util.concurrent.BlockingQueue; 

/ ** 
 *消費者
 * / 
パブリック クラスの消費者実装のRunnable { 

    BlockingQueueのキュー、

    公共消費(BlockingQueueのキュー){
         この .queue = キュー; 
    } 

    @Override 
    公共 ボイドRUN (){
         ながら、真の){
             試みは、{
                 / ** 
                 その後、* 3秒の遅延とキューから削除、
                 *あなたは、生産キューフル生産後の生産を停止するために見ることができるので、
                 消費者支出の後まで生産を継続します*
                 * / 
                のThread.sleep( 3000 
                ;(queue.take())を消費
            } キャッチ(InterruptedExceptionあるE){ 
                e.printStackTrace(); 
            } 
        } 
    } 

    / ** 
     *消費もの
     * @param O
      * / 
    ボイド消費(オブジェクトO){ 
        するSystem.out.println( "消費者が何かを費やして開始...." + O); 
    } 
}
パッケージconcurrent.blockingqueue; 

インポートjava.util.concurrent.ArrayBlockingQueue;
 インポートjava.util.concurrent.BlockingQueue; 

/ ** 
 *メイン試験クラス
 * / 
パブリック クラスMainTest {
     公共 静的 ボイドメイン(文字列[]引数){
         / ** 
         それは容量が詰まり始め超えた場合*のブロッキングキューの容量に従事することは、3です
         * / 
        BlockingQueueのキュー = 新しい新しいとArrayBlockingQueueを(3 );
         新しい新しいスレッド(新しい新しいプロデューサー(キュー)。)開始();
         新しい新しいスレッド(新しい新しい消費者(キュー))。開始(); 
    } 
}

参照結果を印刷します:

生産者は1人の...物事の生産を開始
...プロデューサーは、物事の生産を開始 2つ
の生産者は、物事を生産を開始... 3つの
生産者は、物事の生産を開始... 4つの
消費者は、物事を消費し始める....   4 
物事の生産を開始するために、生産... 5つ
の消費者は、物事を消費し始めている....   5つの
生産者は、物事を生産を開始... 6つの
消費者は、物事を消費し始める....   6つの
生産者は、物事の生産を開始。 ... 7人の
消費者が....物事を消費し始める   7つの
生産者は、物事を生産を開始... 8つの
....消費者は、物事を消費し始める   8人の
生産者が物事を生産を開始... 9人の
消費者が何を費やして開始します....   9つの
生産者は生産物事を開始する... 10

この結果は明らかです。

おすすめ

転載: www.cnblogs.com/fanerwei222/p/11871704.html