读锁(共享锁)写锁(独占锁)解析
在多线程环境下一个资源类被读是没有任何问题的,所以满足并发要求,但是,如果有一个线程去写共享资源,那么就不应该再有其他线程可以对该资源进行读或写了。也就是说,读-读可以共存,读-写不能共存,写-写不能共存。
举例说明:
首先我们手写一个缓存类,不加锁看执行结果
package com.example.demo;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.concurrent.TimeUnit;
class MyCache{
private volatile Map<String,Object> map=new HashMap<>();
public void put(String key,Object value){
System.out.println(Thread.currentThread().getName()+"\t正在写入:"+value);
//模拟网络通信延迟
try {
TimeUnit.MILLISECONDS.sleep(500);
}catch (Exception e){
e.printStackTrace();
}
map.put(key,value);
System.out.println(Thread.currentThread().getName()+"\t正在写成:");
}
public void get(String key){
System.out.println(Thread.currentThread().getName()+"\t正在读取:")