今天講一下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();