Javaスレッドの通信学習(マルチスレッド(ロック)) - プロデューサーコンシューマー

同期SDK1.5のバージョンアップ後、アイデアがある:同期ロックオブジェクトは、アクション操作可能なロックが含まれているオブジェクトにカプセル化。

コード:

  1  // パッケージ導入1、
  2  java.util.concurrent.locksにインポート* ;.
   。3  クラスリソースを
   。4  {
   5      プライベート文字列名;
   6      プライベート int型の COUNT = 1 ;
   7      プライベート ブールのフラグ= falseに;
   8      
  9。     // ミューテックスを作成しますロック(同期に相当する)
10      )ReentrantLockの新しい新=(のロックロック;
 11      // ロックオブジェクトを作成し(オブジェクトは、オブジェクトに相当)
12がある     状況条件producer_con lock.newCondition =()は、
 13である     条件条件consumer_con lock.newCondition =()のために、
 14      
15     公共 ボイド集合(文字列名) 
 16      {    
 17          lock.lock()。
18          トライ
19          {
 20              ながら(フラグ)
 21                  のtry { producer_con.await()。} キャッチ(InterruptedExceptionある電子){}
 22              この .nameの=名+ 数えます。
23              数++ ;
24              のSystem.out.println(にThread.currentThread()のgetName()+ "...生产者..." +。この.nameの);
25              フラグ= 26             consumer_con.signal();
27          }
 28          最後に
29          {
 30              lock.unlock()。
31          }
 32      }
 33      
34      公共 ボイドアウト()
 35      {
 36          lock.lock()。
37          トライ
38          {
 39              ながら(!フラグ)
 40                  のtry { consumer_con.await()。} キャッチ(InterruptedExceptionある電子){}
 41             System.out.println(にThread.currentThread()のgetName() + "== 消費者==" +。この.nameの)
 42が              、フラグが= falseに43である             producer_con.signal();
 44である         }
 45          最後に
46である         {
 47              ロック.unlock();
 48          }
 49      }
 50  }
 51が 
52である // カスタム・スレッド・タスク(プロデューサスレッド)
53である クラス生産用具のRunnable
 54は {
 55      プライベート;リソースR&LT
 56は     
57であります     生産者(R&リソースLT)
 58      {
 59          この .R = R<
 60      }
 61である     公共 ボイドRUN()
 62は     、{
 63であり、         一方、真の64          {
 65              r.set( "製品" );
 66          }
 67      }
 68  }
 69  // 定義されたタスク・スレッド(スレッド消費者)
70  クラスの消費者実装のRunnable
 71は {
 72      専用リソースR<
 73である     
74     消費者(リソースR)
 75      {
 76          この .R = R。
77      }
 78      
79      公共 ボイドラン()
 80      {
 81          ながら82          {
 83              r.out()。
84          }
 85      }
 86  }
 87  
88  クラスProducerConsumerDemo
 89  {
 90      公共 静的 ボイドメイン(文字列[]引数)
 91      {
 92          //共有リソースの例
93          リソース= R&LT 新しい新しいリソース();
 94          // インスタンス化タスクをスレッドは、共有リソースを指定する
95          プロデューサーP = 新しい新プロデューサ(R&LT);
 96          コンシューマC = 新しい新しい消費者(R&LT);
 97          // インスタンス化スレッドタスク・スレッドを指定する
98          スレッド= T0 新しい新しいスレッド(P)を、
 99          スレッド= T1 新しい新しいスレッド(P)、
 100          スレッドT2 = 新しい新しいスレッド(C)、
 101          スレッドT3 = 新しい新しいスレッド(C);
 102          // オープン糸、実行スレッドの方法は、タスクの実行
103         t0.start();
104          t1.start()。
105          t2.start()。
106          t3.start()。
107      }
 108 }

 

結果:

 

ロック同期は、それが関係して違いを持っ​​てパッケージ化することです。

 

おすすめ

転載: www.cnblogs.com/WarBlog/p/12083402.html