ReadWriteLock讀寫鎖
概念:

讀寫鎖:存在著兩個鎖,一個讀鎖(共享鎖),一個寫鎖(獨占鎖)
從檔案中獲取到只有一個實作類 :ReentrantReadWriteLock
代碼實作
/**獨占鎖(讀鎖):
* 共享鎖(寫鎖):
* */
public class ReadWriteLockTest {
public static void main(String[] args) {
// MyLock myLock = new MyLock();
MyLock2 myLock = new MyLock2();
//只進行寫入操作
for (int i =1; i <=5 ; i++) {
final int temp=i;
new Thread(()->{
myLock.Put(temp+"",temp+"");
},String.valueOf(i)).start();
}
//只進行讀取操作
for (int i = 1; i <=5 ; i++) {
final int temp=i;
new Thread(()->{
myLock.Get(temp+"");
},String.valueOf(i)).start();
}
}
}
//自定義快取
class MyLock{
private volatile Map<String , Object> map = new HashMap();
//寫入操作 ,
public void Put(String key ,Object value){
System.out.println(Thread.currentThread().getName()+"寫入"+key);
map.put(key , value);
System.out.println(Thread.currentThread().getName()+"寫入OK");
?
}
//讀取操作
public void Get(String key){
System.out.println(Thread.currentThread().getName()+"讀取"+key);
map.get(key);
System.out.println(Thread.currentThread().getName()+"讀取OK");
}
}
?
//加入ReadWriteLock(讀寫鎖)進行操作
class MyLock2{
private volatile Map<String , Object> map = new HashMap();
//讀寫鎖
private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
?
//寫入操作 ,
public void Put(String key ,Object value){
//加入寫鎖(獨占鎖),只能有一個執行緒進行寫入
readWriteLock.writeLock().lock();
try {
System.out.println(Thread.currentThread().getName()+"寫入"+key);
map.put(