读写锁

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读写锁相关的知识,希望对你有一定的参考价值。

 1 public class ReadWriteLockTest {
 2     private static Lock loc = new ReentrantLock();
 3 
 4 
 5     private static ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
 6     private static Lock readLock = readWriteLock.readLock();
 7     private static Lock writeLock = readWriteLock.writeLock();
 8 
 9     private int value;
10 
11     public Object handleRead(Lock lock) throws InterruptedException {
12         try {
13             lock.lock();
14             Thread.sleep(1000);
15             return value;
16         } finally {
17             lock.unlock();
18         }
19     }
20 
21     public void handleWrite(Lock lock, int value) throws InterruptedException {
22         try {
23             lock.lock();
24             Thread.sleep(1000);
25             this.value = value;
26         } finally {
27             lock.unlock();
28         }
29     }
30 
31     public static void main(String[] args) {
32         final ReadWriteLockTest test = new ReadWriteLockTest();
33         Runnable readRun = () -> {
34             try {
35 //                test.handleRead(readLock);
36                 test.handleRead(loc);
37             } catch (InterruptedException e) {
38                 e.printStackTrace();
39             }
40         };
41 
42         Runnable writeRun = () -> {
43             try {
44 //                test.handleWrite(writeLock, new Random().nextInt());
45                 test.handleWrite(loc, new Random().nextInt());
46             } catch (InterruptedException e) {
47                 e.printStackTrace();
48             }
49         };
50 
52 
53         for (int i = 0; i < 18; i++) {
54             new Thread(readRun).start();
55         }
56 
57         for (int i = 18; i < 20; i++) {
58 
59             new Thread(writeRun).start();
60         }
61 
63     }
64 
65 
66 }

在读操作比较多的时候,读写分离锁很明显能提高性能

 

以上是关于读写锁的主要内容,如果未能解决你的问题,请参考以下文章

互斥锁自旋锁读写锁和条件变量

ReentrantReadWriteLock场景应用

读写锁ReentrantReadWriteLock源代码浅析

锁,同步,可重入锁,读写锁(转)

我写的由 GCD 代码支持的读写器锁导致并行测试中的死锁

读写锁(ReadWriteLock)