ReentrantReadWriteLock(互斥)和CountDownLatch(同步)解析

今天讲一下Java常用的两个类,一个是常用的互斥类,一个是同步。

ReentrantReadWriteLock

ReentrantReadWriteLock和同一个包下面的ReentrantLock都是用于互斥。区别是ReentrantReadWriteLock效率更高,分为读写锁。
读锁:ReentrantReadWriteLock.readLock.lock()
写锁:ReentrantReadWriteLock.writeLock.lock()
读锁之间互相不互斥,读锁和写锁互斥,写锁和其他写锁,读锁互斥。
ReentrantLock只有一个锁,没有细分读写锁,效率更低。

CountDownLatch

这个是一个同步类。
用于两种场景:

1.一个线程需要等待n个线程的执行结果。

初始化CountDownLatch latch = new CountDownLatch(n);

拿着这个引用,在需要被等待的线程执行完了之后,调用latch.countDown();

在等到的那个线程操作之前,调用latch.wait();

2.多个线程一起同步执行。
初始化CountDownLatch latch = new CountDownLatch(1);

在启动线程,执行latch.countDown();

各个竞赛线程,执行latch.wait();

发布了586 篇原创文章 · 获赞 1037 · 访问量 186万+

猜你喜欢

转载自blog.csdn.net/u010321471/article/details/80978700