From 1cee06d0de70d2ae3c607fbb2f67d14eb5db4967 Mon Sep 17 00:00:00 2001 From: "shuang.kou" Date: Wed, 22 Apr 2020 15:27:40 +0800 Subject: [PATCH] Update a-thread-safe-implementation-of-lru-cache.md --- .../a-thread-safe-implementation-of-lru-cache.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/java/java-programming-problem/a-thread-safe-implementation-of-lru-cache.md b/docs/java/java-programming-problem/a-thread-safe-implementation-of-lru-cache.md index 80aa2cec..4cfe7ef1 100644 --- a/docs/java/java-programming-problem/a-thread-safe-implementation-of-lru-cache.md +++ b/docs/java/java-programming-problem/a-thread-safe-implementation-of-lru-cache.md @@ -68,7 +68,9 @@ public interface ReadWriteLock { `ReentrantReadWriteLock` 是`ReadWriteLock`接口的具体实现类。 -**读写锁还是比较适合缓存这种读多写少的场景。读写锁可以保证多个线程和同时读取,但是只有一个线程可以写入。但是,有一个问题是当读锁被线程持有的时候,读锁是无法被其它线程申请的,会处于阻塞状态,直至读锁被释放。** +**读写锁还是比较适合缓存这种读多写少的场景。读写锁可以保证多个线程和同时读取,但是只有一个线程可以写入。** + +读写锁的特点是:写锁和写锁互斥,读锁和写锁互斥,读锁之间不互斥。也就说:同一时刻允许多个线程对共享资源进行读操作;同一时刻只允许一个线程对共享资源进行写操作;当进行写操作时,同一时刻其他线程的读操作会被阻塞;当进行读操作时,同一时刻所有线程的写操作会被阻塞。 另外,**同一个线程持有写锁时是可以申请读锁,但是持有读锁的情况下不可以申请写锁。**