简述超类Object的锁和CountDownLatch类

先简单说一下关于线程通信的概念:线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体的必用方式之一。当线程存在通信指挥,系统间的交互性会更强大,在提高CPU利用率的同时还会使开发人员对线程任务在处理的过程中进行有效的把控与监督。


1、使用超类Object的wait/notify方法实现线程间的通信,因为Object是超类,所以Java所有的对象都提供了这两个方法。

但是需要注意两点:第一,wait和notify必须配合synchronized关键字使用,第二,wait方法会释放锁,而notify方法不会释放锁。

例子:在启动线程的时候要注意的一点事,调用wait的线程先启动,调用notify的线程后启动

执行结果:

由于Object的wait和notify不是实时性的,因为wait会释放锁,而notify不会释放锁,所以就算线程1已经通知了线程2,但是到了线程1执行完释放锁后,线程2才能获得锁。

2、为了达到线程通信的实时性,我们可以使用并发包下面的CountDownLatch类。

例子:


执行结果:可以看到实时性的效果,线程1通知后,线程2立刻获得锁然后执行


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值