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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章