- ReadWriteLock
- 读写锁:更加细粒度的锁
- 读-读:可以共存
- 读-写:不能共存
- 写-写:不能共存
- JUC的目的,就是将锁的粒度变的更细,提高并发效率;至少读-读,可以共存
public class ReadWriteLockDemo {
public static void main(String[] args) {
MyCache2 myCache = new MyCache2();
for (int i=1;i<=5;i++){
final int temp = i;
new Thread(()->{
myCache.put(String.valueOf(temp),String.valueOf(temp));
},String.valueOf(i)).start();
}
for (int i=1;i<=5;i++){
final int temp = i;
new Thread(()->{
myCache.get(String.valueOf(temp));
},String.valueOf(i)).start();
}
}
}
class MyCache {
private Map<String,String> map = new HashMap<>();
public void put(String key,String value){
System.out.println(Thread.currentThread().getName()+"正在写入");
map.put(key,value);
System.out.println(Thread.currentThread().getName()+"写入Ok");
}
public String get(String key){
System.out.println(Thread.currentThread().getName()+"正在读取");
System.out.println(Thread.currentThread().getName()+"读取Ok");
return map.get(key);
}
}
class MyCache2 {
private Map<String,String> map = new HashMap<>();
private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
public void put(String key,String value){
readWriteLock.writeLock().lock();
System.out.println(Thread.currentThread().getName()+"正在写入");
map.put(key,value);
System.out.println(Thread.currentThread().getName()+"写入Ok");
readWriteLock.writeLock().unlock();
}
public String get(String key){
readWriteLock.readLock().lock();
System.out.println(Thread.currentThread().getName()+"正在读取");
String value = map.get(key);
System.out.println(Thread.currentThread().getName()+"读取Ok");
readWriteLock.readLock().unlock();
return value;
}
}