LinkedBlockingQueue、ArrayBlockingQueue、DelayQueue、TransferQueue、SynchronousQueue

1.LinkedBlockingQueue

/ * * 
 *使用ブロック同期キューLinkedBlockingQueue完全生産者-消費者モデル
 *使用シーンより。
 * / 
パブリック クラスT05_LinkedBlockingQueue {
     公共 静的 ボイドメイン(文字列[]引数){ 

        BlockingQueueの <ストリング>キュー= 新しい新しい LinkedBlockingQueue <> (); 

        // のプロデューサスレッド生産開始
        新しい新しいスレッドを(() - > {
             ためINT J = 0 ; J < 100 ; J ++ ){
                 試み{ 
            // Ruoguoコンテナがいっぱいになる、それは予備のコンテナ挿入データで、ここで待ってます queue.put(
AAA" + J); // PUT方法、容器に添加元素、容器が満杯である場合、それは待機ブロックする } キャッチ(InterruptedExceptionあるE){ e.printStackTrace(); } } }、" P " ).start() ; 試み{ TimeUnit.SECONDS.sleep(1 ); } キャッチ(InterruptedExceptionあるE){ e.printStackTrace(); } // コンシューマスレッド消費イネーブル するためには、int型 I = 0 ;私は< 5。 ; Iは++します){ 新しい新しいスレッド(() - > { ながら、真の){ 試み{ システム。OUT .println(にThread.currentThread()のgetName()+。" " + queue.take()); // キューからデータを取得し、空の場合、それは待機をブロックします } キャッチ(InterruptedExceptionあるE){ e.printStackTraceを(); } } }、" C " + I).start(); } } }

2.ArrayBlockingQueue

/ * * 
 *同期キューブロックを使用することArrayBlockingQueue完全な生産者-消費者モデル境界
 * / 
パブリック クラスT06_ArrayBlockingQueue {
     公共 静的 ボイドメイン(文字列[]引数)は{InterruptedExceptionあるスロー

        BlockingQueueのキュー = 新しい新しい ArrayBlockingQueue <>(10 のためのINT = I 0、Iは< 10 ; Iは++ ){ 
            queue.put(" " + I); 
        }       // PUTは、次いで、容器が満杯の場合に待機
         // queue.put( "A11"); //
それはブロックされます // queue.add( "A11")を; //は例外スロー // するSystem.out.println(Queue.offer( "A11を")); //はfalseを返し システム。OUT .println(キュー。提供(" A11 "1。、TimeUnit.SECONDSは)); // 成功した後に追加された、真の待機の1秒を返す1S内の空きがある場合は、falseを返します } }

 

おすすめ

転載: www.cnblogs.com/gxlaqj/p/11699740.html