简述超类Object的锁和CountDownLatch类

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


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

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

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

简述超类Object的锁和CountDownLatch类简述超类Object的锁和CountDownLatch类

执行结果:

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

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

例子:

简述超类Object的锁和CountDownLatch类简述超类Object的锁和CountDownLatch类

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

简述超类Object的锁和CountDownLatch类