讀寫鎖(ReentrantReadWriteLock)
讀寫鎖:核心思想實現讀寫分離,高併發下特別適合 讀多寫少的場景。
synchronized關鍵字和ReentrantLock 同一時間只能有一個執行緒進行訪問被鎖定的程式碼,讀寫鎖的機制則不是,本質上分為兩把鎖,讀鎖和寫鎖,在讀鎖情況下,多個執行緒可以併發訪問資源,只有當是寫鎖時只能一個一個的順序執行。
口訣:讀讀共享,寫寫互斥,讀寫互斥。
private ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock(); private ReentrantReadWriteLock.ReadLock readLock = rwLock.readLock(); private ReentrantReadWriteLock.WriteLock writeLock = rwLock.writeLock(); public void read() { try { readLock.lock(); System.out.println("當前執行緒:" + Thread.currentThread().getName() + "進入..."); Thread.sleep(3000); System.out.println("當前執行緒:" + Thread.currentThread().getName() + "退出..."); } catch (Exception e) { e.printStackTrace(); } finally { readLock.unlock(); } } public void write() { try { writeLock.lock(); System.out.println("當前執行緒:" + Thread.currentThread().getName() + "進入..."); Thread.sleep(3000); System.out.println("當前執行緒:" + Thread.currentThread().getName() + "退出..."); } catch (Exception e) { e.printStackTrace(); } finally { writeLock.unlock(); } }