1. 程式人生 > >ReentrantReadWriteLock類和ReentrantLock類的區別

ReentrantReadWriteLock類和ReentrantLock類的區別

java.util.concurrent.locks包定義了兩個鎖類,ReentrantLock和ReentrantReadWriteLock類。

當有很多執行緒都從某個資料結構中讀取資料而很少有執行緒對其進行修改時,後者就很有用了。在這種情況下,允許讀取器執行緒共享訪問是合適的。當然,寫入器執行緒依然必須是互斥訪問的

下面是使用讀/寫鎖的必要步驟:

(1) 建立一個ReentrantReadWriteLock物件

private ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();

(2)抽取讀鎖和寫鎖:

private Lock readLock = rwl.readLock();//得到一個可被多個讀操作共用的讀鎖,但它會排斥所有寫操作
private Lock writeLock = rwl.writeLock();//得到一個寫鎖,它會排斥所有其他的讀操作和寫操作

(3) 對所有訪問者加讀鎖

	public double getTotalBalance(){
		readLock.lock();
		try{...};
		finally{readLock.unlock();}
	}

對所有修改者加寫鎖
	public void transfer(){
		writeLock.lock();
		try{...};
		finally{writeLock.unlock();}
	}