日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
為什么要用讀寫鎖?它有什么優(yōu)點(diǎn)?

1.讀寫鎖使用

在 Java 語言中,讀寫鎖是使用 ReentrantReadWriteLock 類來實(shí)現(xiàn)的,其中:

為鳳岡等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及鳳岡網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、鳳岡網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

  • ReentrantReadWriteLock.ReadLock 表示讀鎖,它提供了 lock 方法進(jìn)行加鎖、unlock 方法進(jìn)行解鎖。
  • ReentrantReadWriteLock.WriteLock 表示寫鎖,它提供了 lock 方法進(jìn)行加鎖、unlock 方法進(jìn)行解鎖。

它的基礎(chǔ)使用如下代碼所示:

// 創(chuàng)建讀寫鎖
final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
// 獲得讀鎖
final ReentrantReadWriteLock.ReadLock readLock = readWriteLock.readLock();
// 獲得寫鎖
final ReentrantReadWriteLock.WriteLock writeLock = readWriteLock.writeLock();
// 讀鎖使用
readLock.lock();
try {
// 業(yè)務(wù)代碼...
} finally {
readLock.unlock();
}
// 寫鎖使用
writeLock.lock();
try {
// 業(yè)務(wù)代碼...
} finally {
writeLock.unlock();
}

1.1 讀讀不互斥

多個(gè)線程可以同時(shí)獲取到讀鎖,稱之為讀讀不互斥,如下代碼所示:

// 創(chuàng)建讀寫鎖
final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
// 創(chuàng)建讀鎖
final ReentrantReadWriteLock.ReadLock readLock = readWriteLock.readLock();
Thread t1 = new Thread(() -> {
readLock.lock();
try {
System.out.println("[t1]得到讀鎖.");
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("[t1]釋放讀鎖.");
readLock.unlock();
}
});
t1.start();
Thread t2 = new Thread(() -> {
readLock.lock();
try {
System.out.println("[t2]得到讀鎖.");
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("[t2]釋放讀鎖.");
readLock.unlock();
}
});
t2.start();

以上程序執(zhí)行結(jié)果如下:

1.2 讀寫互斥

讀鎖和寫鎖同時(shí)使用是互斥的(也就是不能同時(shí)獲得),這稱之為讀寫互斥,如下代碼所示:

// 創(chuàng)建讀寫鎖
final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
// 創(chuàng)建讀鎖
final ReentrantReadWriteLock.ReadLock readLock = readWriteLock.readLock();
// 創(chuàng)建寫鎖
final ReentrantReadWriteLock.WriteLock writeLock = readWriteLock.writeLock();
// 使用讀鎖
Thread t1 = new Thread(() -> {
readLock.lock();
try {
System.out.println("[t1]得到讀鎖.");
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("[t1]釋放讀鎖.");
readLock.unlock();
}
});
t1.start();
// 使用寫鎖
Thread t2 = new Thread(() -> {
writeLock.lock();
try {
System.out.println("[t2]得到寫鎖.");
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("[t2]釋放寫鎖.");
writeLock.unlock();
}
});
t2.start();

以上程序執(zhí)行結(jié)果如下:

1.3 寫寫互斥

多個(gè)線程同時(shí)使用寫鎖也是互斥的,這稱之為寫寫互斥,如下代碼所示:

// 創(chuàng)建讀寫鎖
final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
// 創(chuàng)建寫鎖
final ReentrantReadWriteLock.WriteLock writeLock = readWriteLock.writeLock();
Thread t1 = new Thread(() -> {
writeLock.lock();
try {
System.out.println("[t1]得到寫鎖.");
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("[t1]釋放寫鎖.");
writeLock.unlock();
}
});
t1.start();

Thread t2 = new Thread(() -> {
writeLock.lock();
try {
System.out.println("[t2]得到寫鎖.");
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("[t2]釋放寫鎖.");
writeLock.unlock();
}
});
t2.start();

以上程序執(zhí)行結(jié)果如下:

2.優(yōu)點(diǎn)分析

提高了程序執(zhí)行性能:多個(gè)讀鎖可以同時(shí)執(zhí)行,相比于普通鎖在任何情況下都要排隊(duì)執(zhí)行來說,讀寫鎖提高了程序的執(zhí)行性能。

避免讀到臨時(shí)數(shù)據(jù):讀鎖和寫鎖是互斥排隊(duì)執(zhí)行的,這樣可以保證了讀取操作不會(huì)讀到寫了一半的臨時(shí)數(shù)據(jù)。

3.適用場(chǎng)景

讀寫鎖適合多讀少寫的業(yè)務(wù)場(chǎng)景,此時(shí)讀寫鎖的優(yōu)勢(shì)最大。

總結(jié)

讀寫鎖是一把鎖分為兩部分:讀鎖和寫鎖,其中讀鎖允許多個(gè)線程同時(shí)獲得,而寫鎖則是互斥鎖。它的完整規(guī)則是:讀讀不互斥、讀寫互斥、寫寫互斥。它適用于多讀的業(yè)務(wù)場(chǎng)景,使用它可以有效的提高程序的執(zhí)行性能,也能避免讀取到操作了一半的臨時(shí)數(shù)據(jù)。


名稱欄目:為什么要用讀寫鎖?它有什么優(yōu)點(diǎn)?
URL鏈接:http://www.5511xx.com/article/cohoigs.html