读写锁的由奢入俭“易”
生活随笔
收集整理的這篇文章主要介紹了
读写锁的由奢入俭“易”
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
package lock.readwrite;import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReentrantReadWriteLock;/*** 描述: 演示ReentrantReadWriteLock可以降級,不能升級*/
public class Upgrading {private static ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(false);private static ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock();private static ReentrantReadWriteLock.WriteLock writeLock = reentrantReadWriteLock.writeLock();private static void readUpgrading() {readLock.lock();try {System.out.println(Thread.currentThread().getName() + "得到了讀鎖,正在讀取");Thread.sleep(1000);System.out.println("升級會帶來阻塞");writeLock.lock();System.out.println(Thread.currentThread().getName() + "獲取到了寫鎖,升級成功");} catch (InterruptedException e) {e.printStackTrace();} finally {System.out.println(Thread.currentThread().getName() + "釋放讀鎖");readLock.unlock();}}private static void writeDowngrading() {writeLock.lock();try {System.out.println(Thread.currentThread().getName() + "得到了寫鎖,正在寫入");Thread.sleep(1000);readLock.lock();System.out.println("在不釋放寫鎖的情況下,直接獲取讀鎖,成功降級");} catch (InterruptedException e) {e.printStackTrace();} finally {readLock.unlock();System.out.println(Thread.currentThread().getName() + "釋放寫鎖");writeLock.unlock();}}public static void main(String[] args) throws InterruptedException {
// System.out.println("先演示降級是可以的");
// Thread thread1 = new Thread(() -> writeDowngrading(), "Thread1");
// thread1.start();
// thread1.join();
// System.out.println("------------------");
// System.out.println("演示升級是不行的");Thread thread2 = new Thread(() -> readUpgrading(), "Thread2");thread2.start();}
}
?
總結
以上是生活随笔為你收集整理的读写锁的由奢入俭“易”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 看似读锁按部就班
- 下一篇: 循环尝试,不释放CPU