-
package bingFaBianCheng17; import java.sql.Connection; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; public class test8 { static boolean a = false; static boolean b = false; static boolean c = false; public static void main(String[] args) throws InterruptedException { ReentrantLock lock = new ReentrantLock(); Condition c1 = lock.newCondition(); Condition c2 = lock.newCondition(); Condition c3 = lock.newCondition(); AtomicInteger ai= new AtomicInteger(0); AtomicInteger bi = new AtomicInteger(0); AtomicInteger ci = new AtomicInteger(0); Thread A = new Thread(new Runnable() { @Override public void run() { try { lock.lock(); while(!a){ c1.await(); } while(ai.get()<10){ ai.incrementAndGet(); System.out.println("A"); b = true; c2.signal(); if (ai.get()>=10){ break; }else { c1.await(); } } } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } },"A"); Thread B = new Thread(new Runnable() { @Override public void run() { try { lock.lock(); while(!b){ c2.await(); } while(bi.get()<10){ bi.incrementAndGet(); System.out.println("B"); c=true; c3.signal(); if (bi.get()>=10){ break; }else { c2.await(); } } } catch (InterruptedException e) { e.printStackTrace(); } finally { c = true; lock.unlock(); } } },"B"); Thread C = new Thread(new Runnable() { @Override public void run() { try { lock.lock(); while(!c){ c3.await(); } while(ci.get()<10){ ci.incrementAndGet(); System.out.println("C"); c1.signal(); if (ci.get()>=10){ break; }else { c3.await(); } } } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } },"C"); A.start(); B.start(); C.start(); Thread.sleep(1000); lock.lock(); a = true; c1.signal(); lock.unlock(); A.join(); B.join(); C.join(); System.out.println("任务完毕"); } }