1、讀寫鎖將一個(gè)資源(如文件)的訪問分為兩個(gè)鎖,一個(gè)讀寫鎖。
2、因?yàn)樽x寫鎖,多個(gè)線程之間的讀寫操作才不會(huì)發(fā)生沖突。
3、ReadWriteLock是讀寫鎖,它是一個(gè)界面,RentrantReadWriteLock實(shí)現(xiàn)了這個(gè)界面。
實(shí)例
public class CacheDemo {
private Map<string, object=""> cache = new HashMap<>();
private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
public static void main(String[] args) {
}
public Object getData(String key) {
Object value = null;
//首先開啟讀鎖,從緩存中去取
readWriteLock.readLock().lock();
try {
value = cache.get(key);
//如果緩存中沒有釋放讀鎖,上寫鎖
if (value == null) {
//對(duì)應(yīng)queryDB()
readWriteLock.readLock().unlock();
//讀鎖必須unlock之后才能獲取寫鎖
readWriteLock.writeLock().lock();
try {
//對(duì)應(yīng)queryDB()
value = queryDB();
} finally {
//釋放寫鎖
readWriteLock.writeLock().unlock();
}
//然后再上讀鎖
readWriteLock.readLock().lock();
}
} finally {
//最后釋放讀鎖
readWriteLock.readLock().unlock();
}
return value;
}
public Object queryDB() {
return "aaaa";
}
}
以上就是java讀寫鎖的介紹,希望對(duì)大家有所幫助。更多關(guān)于“java培訓(xùn)”的問題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學(xué),課程大綱緊跟企業(yè)需求,更科學(xué)更嚴(yán)謹(jǐn),每年培養(yǎng)泛IT人才近2萬(wàn)人。不論你是零基礎(chǔ)還是想提升,都可以找到適合的班型,千鋒教育隨時(shí)歡迎你來(lái)試聽。