成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么要用讀寫鎖?它有什么優點?

開發 前端
在以上代碼中,利用上述的工具類型,我們就可以輕松地提取 User 對象類型中函數類型和非函數類型的屬性及相關的對象類型。

讀寫鎖(Readers-Writer Lock)顧名思義是一把鎖分為兩部分:讀鎖和寫鎖,其中讀鎖允許多個線程同時獲得,因為讀操作本身是線程安全的,而寫鎖則是互斥鎖,不允許多個線程同時獲得寫鎖,并且寫操作和讀操作也是互斥的。總結來說,讀寫鎖的特點是:讀讀不互斥、讀寫互斥、寫寫互斥。

1.讀寫鎖使用

在 Java 語言中,讀寫鎖是使用 ReentrantReadWriteLock 類來實現的,其中:

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

它的基礎使用如下代碼所示:

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

1.1 讀讀不互斥

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

// 創建讀寫鎖
final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
// 創建讀鎖
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();

以上程序執行結果如下:

1.2 讀寫互斥

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

// 創建讀寫鎖
final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
// 創建讀鎖
final ReentrantReadWriteLock.ReadLock readLock = readWriteLock.readLock();
// 創建寫鎖
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();

以上程序執行結果如下:

1.3 寫寫互斥

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

// 創建讀寫鎖
final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
// 創建寫鎖
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();

以上程序執行結果如下:

2.優點分析

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

避免讀到臨時數據:讀鎖和寫鎖是互斥排隊執行的,這樣可以保證了讀取操作不會讀到寫了一半的臨時數據。

3.適用場景

讀寫鎖適合多讀少寫的業務場景,此時讀寫鎖的優勢最大。

總結

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

責任編輯:武曉燕 來源: Java面試真題解析
相關推薦

2022-07-13 07:06:47

HTTPSHTTP協議

2009-01-09 23:06:41

服務器SCSI硬盤PC

2020-04-07 16:12:56

Go編程語言開發

2023-12-21 21:39:44

2024-05-15 09:41:22

樂觀鎖編程

2024-07-02 13:27:38

2021-12-13 01:40:29

ElasticSear倒排索引

2021-05-11 06:57:15

HBaseBATJ公司

2024-01-02 17:28:12

芯片CPUAI計算

2015-07-01 10:25:07

Docker開源項目容器

2023-09-22 10:05:32

2016-01-12 16:58:31

C游戲

2022-07-06 09:29:40

JMH性能測試

2023-09-19 16:37:47

網絡

2023-12-06 09:10:28

JWT微服務

2012-12-12 10:05:05

產品項目

2024-06-11 00:01:00

并發validate場景

2022-02-16 22:37:00

流式SQLSQL數據庫

2020-11-19 07:38:57

邊緣計算

2021-07-26 18:38:48

Bpmn流程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区精品 | 黄色国产区 | 一区二区福利视频 | 精品亚洲一区二区三区四区五区 | 国产精品久久久久国产a级 欧美日韩国产免费 | 国产精品一区二区三区四区 | 91精品国产综合久久国产大片 | 美女拍拍拍网站 | 欧美一级二级在线观看 | 日韩欧美在线视频 | 日韩精品久久久久 | 日韩欧美专区 | a成人| 亚洲国产成人精品女人久久久 | 色资源站 | 日韩精品一区二区三区视频播放 | 综合久久综合久久 | 91精品久久久久久综合五月天 | 天堂一区二区三区 | 91精品国产综合久久福利软件 | 免费黄色av | 国产精品久久久久一区二区三区 | 日本黄视频在线观看 | 春色av| 欧美一级大片免费看 | 精品一区二区三区在线观看国产 | 欧美一区在线视频 | 国产精品无码久久久久 | 色吊丝2288sds中文字幕 | 亚洲视频欧美视频 | 一区二区三区在线 | 91在线视频免费观看 | 成年人在线观看 | 日韩一级在线 | 人人99| 欧洲精品久久久久毛片完整版 | www.99re| 色综合视频在线 | 手机av免费在线 | 91视频官网 | 久久成人国产精品 |