Javaのテスト:二つのスレッドを作成して、アナログ対話、交互に出力

| - デマンド説明

| - 実装

ああ、この問題は、詳細なコードのコメントを参照して、消費者と生産者の古典とみなすことができます

 

| - コンテンツコード 

1  / ** 
2  * @auther :: 9527
 3  * @description:消费者
 4  * @program:多线程
 5  * @Create:2019年8月10日10時45
 6   * / 
7  パブリック クラスの消費者が延びスレッド{
 8      プライベート仲介半ば= nullを9  
10  
11      公共消費者(){
 12      }
 13  
14      公共消費者(仲介映画){
 15          この .MID = ムービー。
16      }
 17  
18      @Override
19      パブリック ボイドRUN(){
 20は         // サイクル50回映画情報表示
21である         ためint型 I = 0、I 1000を<; Iは++ ){
 22で             試み{
 23である                  のThread.sleep(100 );
 24              } キャッチ(InterruptedExceptionあるE){
 25                  e.printStackTrace();
 26れる             }
 27              この.mid.get();
 28          }
 29      }
 30 }
生成された情報を除去するための責任を消費者、生産者
1  / ** 
2  * @auther :: 9527
 3  * @description:
 4  * @program:多线程
 5  * @Create:2019年8月10日10時39分
 6   * / 
7  パブリック クラスプロデューサーが実装  Runnableを{
 8      // 生产数据
9      プライベート仲介半ば= nullを10      プライベート ブールフラグ= ;
11  
12      公共プロデューサ(仲介ムービー){
 13          この .MID = ムービー。
14      }
 15  
16     公共{プロデューサー()
 。17      }
 18である 
。19      @Override
 20は     公共 ボイドRUN(){
 21は         // 交互二つのフィルム記録サイクルエントリ、
22である         ためにint型、Iは<1000; I = 0 I ++ ){
 23が             IF (フラグに) {
 24                  この .mid.set(「ジャックは言った:」「私は水道メーターを確認してください」);
 25                  フラッグ= ;
 26              } {
 27                   .mid.set(「ローズは言った:」「あなたは誰ですか? " );
 28                  フラグに= trueに29              }
 30          }
 31      }
 32 }
情報の生産のための責任プロデューサー、
1  パッケージcom.duo;
 2  
。3  / ** 
4  * 9527 :: @auther
 。5  * @description:生産者と消費者
 6  * @program:マルチスレッディング
 。7  * @Create:2019年8月10日10:36
 。8   * / 
9  パブリック クラス仲介{
 10      プライベート文字列名;
 11      プライベート文字列情報、
 12は     専用 ブール =フラグにtrueに ; // フラグが制御プロデューサを生成するように、設定されている、消費者支出
13は、 
14      公共の文字列のgetName(){
 15          リターン名;
 16     }
 17  
18      公衆ストリングGETINFO(){
 19          リターン情報;
20      }
 21  
22      公共の仲介(文字列名、文字列情報){
 23          この .nameの= 名前。
24          の.info = 情報。
25      }
 26  
27      公共の仲介(){
 28      }
 29  
30      公共 同期 ボイド  集合(文字列名、文字列情報){
 31          であれば(!フラグ){
 32              のtry {
 33                 スーパー .WAIT();   // 当前线程等待
34              } キャッチ(InterruptedExceptionある電子){
 35                  e.printStackTrace();
36              }
 37          }
 38             この .nameの= 名前。
39          試み{
 40              のThread.sleep(100 )。
41          } キャッチ(InterruptedExceptionある電子){
 42              e.printStackTrace();
43          }
 44             の.info = インフォメーション。
45          フラグ= ;    // 個人消費ように、フラグをリセット
46は         スーパー .notify();   // 使用してオブジェクトのメソッドを通知する、消費者スレッドが起きるように
47      }
 48      公共 同期 ボイドGET(){
 49          IF (フラグに){
 50              トライ{
 51は                 スーパー; .WAIT()
 52である              } キャッチ(InterruptedExceptionあるE){
 53は                 e.printStackTrace();
 54である             }
 55          }
 56である          のSystem.out.println(この .getName()+ " - " + この.getInfo() );
57である          =フラグにtrueに58           .notify();   // ウェイクアップスレッド
59      }
 60 }
情報中継サイトリズム制御の生産と消費のために責任があります
1  / ** 
2  * 9527 :: @auther
 3。 * @description:テストクラス
 4。 * @program:マルチスレッディング
 。5  * @Create:2019年8月10日11時47分
 。6   * / 
7  パブリック クラスのテスト{
 8      パブリック 静的 ボイドメイン(文字列[]引数){
 9          // 製造=== >>取る離れて作製した
10          仲介MID = 新しい新)仲介(;
 11          スレッドプロデューサー= 新しい新しいスレッド(新しい新プロデューサ(MID));
 図12は、ある          スレッド=消費者の新しい新しいスレッド(新新消費者(MID));
13          producer.start()。
14          consumer.start()。
15      }
 16 }
プログラムのエントリ

 

 

| - 業績

 

おすすめ

転載: www.cnblogs.com/twuxian/p/11331077.html