importjava.util.concurrent.CountDownLatch;importjava.util.concurrent.Semaphore;public classTestABC {public static void main(String[] args) throwsInterruptedException {
CountDownLatch countDownLatch=new CountDownLatch(2);
Semaphore semaphoreC= new Semaphore(1);
Thread threadA= new Thread(newRunnable() {
@Overridepublic voidrun() {try{
Thread.sleep(newjava.util.Random().nextInt(1000));
}catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
countDownLatch.countDown();
}
},"Thread-A");
Thread threadB= new Thread(newRunnable() {
@Overridepublic voidrun() {try{
Thread.sleep(newjava.util.Random().nextInt(1000));
}catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
countDownLatch.countDown();
}
},"Thread-B");
Thread threadC= new Thread(newRunnable() {
@Overridepublic voidrun() {try{
semaphoreC.acquire();
}catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
semaphoreC.release();
}
},"Thread-C");//占用C锁,直到A/B线程完成后,才释放C锁。
semaphoreC.acquire();
threadA.start();
threadB.start();
threadC.start();
countDownLatch.await();//释放C锁,让C线程有获取锁的可能
semaphoreC.release();
}
}