c await和java_Java-JUC(十二):有3个线程。线程A和线程B并行执行,线程C需要A和B执行完成后才能执行。可以怎么实现?...

该博客探讨了Java并发编程中CountDownLatch和Semaphore的使用。在示例代码中,创建了三个线程A、B和C,其中线程A和B执行并释放CountDownLatch,线程C在A和B完成后再执行,通过Semaphore控制线程的并发访问。这个例子展示了如何在多线程环境中同步操作和资源管理。
摘要由CSDN通过智能技术生成

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();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值