Javaのマルチスレッドの印刷を交互に待機ウェイクパリティを切り替えます

入門

     日常業務の生活の中で、それは少数の人々やJavaプログラミングで同じことをやって多くの人々かもしれ似たような状況があるだろうと、同じことが起こるだろう、複数のスレッドは、電車の駅と同じ仕事を、行うチケットシステムを購入することはできませんチケットを買うために複数の人が、同じである場合、別のウィンドウ(スレッド)がこのチケットを販売することができ、その過程でロックに関与されていない場合、チケットの販売に窓(スレッド)そして、資源の問題は、リソースをつかむしていない、同じことをやってのプロセスのスレッドするスレッドを修正する方法を、待っていると、作業状況を待っていた、そして我々は、マルチスレッドのウェイクアップを待つとスイッチについての話します例えば、印刷パリティの二つのスレッドAとBを交互例をこの順に工程、次のように

パッケージ com.svse.thread。
輸入 java.util.concurrent.atomic.AtomicInteger。

/ **
*プリント交互パリティ
*機能:
* @著者:ZSQ
5月27日4時34分30秒の2019インディアン5午後:* DATE作成
*説明の修飾修正時刻
*
*著作権(C)2019北京志華を天城テクノロジー株式会社-すべての権利予約
* /
パブリッククラス AlternatePrinting {

  // 2つのスレッドが同じロックを使用してみましょう。交互に実行します。
  判断が奇数でない場合は、//奇数奇数印刷を入力して、実行スレッドを追加します。その後、スレッドはロックリソースを解放します。そして、スレッドが待機させ
  偶数でも印刷を入力して実行スレッドを追加している場合//裁判官は、さえません。その後、スレッドはロックリソースを解放します。その後、スレッドは待機せ
  パブリック静的のAtomicIntegerのAtomicInteger =の新しい新しい(のAtomicIntegerの1);

  公共の静的な無効メイン(文字列[]引数){
    スレッドAが= 新しい新しいスレッド(新しい新しい AThreadを());
    スレッドB = 新たな新しいスレッド(新しい新しい BThread()) ;
    。スタート()
    。B スタート();
  }

  //奇数线程
  のpublic staticクラス AThreadは実装したRunnable {
    ます。public void実行(){
      ながら、){
        同期(のAtomicInteger){
        場合(atomicInteger.intValue()%2!= 0){
          システム。アウト .println( " 奇数线程: " + atomicInteger.intValue());
          試す {
            スレッドを。スリープ(500);
          } キャッチ(InterruptedExceptionあるのE1){
            // TODO自動生成キャッチブロック
            e1.printStackTrace()。
          }
          のAtomicInteger。getAndIncrement(); //原子的電流値に1を加えました。
          //奇数のスレッドは、ロック・リソースを解放する
          。のAtomicIntegerは、通知();オペレーションを実行した後にロックを解除//待機
          試み {
            のAtomicInteger。ウエイト();
          } キャッチ {(InterruptedExceptionあるE)
            ; e.printStackTraceを()
          }
        } {
          /用/奇数のスレッドが待機
          試み {
            。のAtomicInteger ウェイト();
          } キャッチ(InterruptedExceptionあるE){
            // TODO自動生成されたブロックキャッチ
            e.printStackTrace();
          }
        }
      }
     }
    }
  }

 
  //偶数线程
  パブリック静的クラス BThreadは実装のRunnable {
    公共ボイドラン(){
      一方){
       同期(のAtomicInteger){
       場合(atomicInteger.intValue()%2 == 0){
          システム。アウト .println( " 偶数线程: " + atomicInteger.intValue());
          試す {
            スレッドを。スリープ(500);
          } キャッチ(InterruptedExceptionあるのE1){
            // TODO自動生成キャッチブロック
            e1.printStackTrace()。
          }
        のAtomicInteger。getAndIncrement(); //原子的電流値に1を加えました。
        //でも解放したロックリソースをスレッド
        のAtomicIntegerが。通知(); //ロックを解除する操作を実行した後にして待って入る
        試み {
          のAtomicInteger。待機を();
        } キャッチ(InterruptedExceptionあるE){
          e.printStackTrace();
        }
      } 他に {
        試み {
          //スレッドも待つ
          のAtomicInteger。ウエイトを();
        } キャッチ(InterruptedExceptionあるE){
          // TODO自動生成されたブロックキャッチ
          e.printStackTraceを();
        }
       }
      }
    }
    }
  }
}

 結果は以下の通りであります:

       

 

おすすめ

転載: www.cnblogs.com/zhaosq/p/10931071.html