開いた二つのスレッド、一つのスレッド印刷A〜Z、52に印刷データスレッド1
輸入java.util.concurrent.locks.Condition。 輸入java.util.concurrent.locks.Lock。 輸入java.util.concurrent.locks.ReentrantLock。 パブリック クラスD20190803 { プライベート チャー A =「A」。 プライベートロックロック= 新しいReentrantLockの(); 民間の条件c_one = lock.newCondition(); 民間の条件c_two = lock.newCondition(); プライベート 静的 ブールフラグ= 真; スレッドの手紙 = 新しいスレッド(新しいです実行可能な(){ 公共 ボイドラン(){ ため(int型 i = 0; iは<26; I ++ ){ lock.lock()。 試す{ 場合(フラグ){ c_two.await()。 } System.out.print( "【" + A + "】" )。 ++ ; Thread.sleep( 100 )。 フラグ = 真。 c_one.signal(); } キャッチ(InterruptedExceptionある電子){ e.printStackTrace(); } 最後に{ lock.unlock()。 } } } })。 スレッド数 = 新しいスレッド(新しいRunnableを(){ 公共 空ラン(){ のために(int型 J = 1; jの<53; J ++ ){ lock.lock(); System.out.print(J + "" ); 場合(J%2 == 0 ){ 試みる{ (のThread.sleep 100を)。 c_two.signal(); フラグ = 偽; もし(!フラグ){ c_one.await()。 } } キャッチ(InterruptedExceptionある電子){ e.printStackTrace(); } 最後に{ lock.unlock()。 } } } } })。 公共の 静的な 無効メイン(文字列[] args)をスローしますInterruptedExceptionある{ D20190803さd = 新しいD20190803()。 d.letter.start(); Thread.sleep( 1000年); d.number.start(); } }