package com.qunar.thread.readwriteLock;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* Created by on 2018/1/11.
*/
public class Demo {
private Map<String,Object> map = new HashMap<>();
/**
* 创建读写锁
*/
private ReadWriteLock rwl = new ReentrantReadWriteLock();
private Lock r = rwl.readLock();
private Lock w = rwl.writeLock();
public Object get(String key){
//读锁
r.lock();
System.out.println(Thread.currentThread().getName()+"开始执行读操作");
try {
return map.get(key);
}finally {
System.out.println(Thread.currentThread().getName() +"读操作完成");
r.unlock();
}
}
public void put(String key,Object value){
//写锁
w.lock();
System.out.println(Thread.currentThread().getName()+"开始执行写操作");
try {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
map.put(key, value);
}finally {
System.out.println(Thread.currentThread().getName()+"写操作完成");
w.unlock();
}
}
}
package com.qunar.thread.readwriteLock;
/**
* Created by on 2018/1/11.
*/
public class Main {
public static void main(String[] args) {
final Demo demo = new Demo();
new Thread(new Runnable() {
@Override public void run() {
demo.get("key1");
}
}).start();
new Thread(new Runnable() {
@Override public void run() {
demo.put("key1","value1");
}
}).start();
new Thread(new Runnable() {
@Override public void run() {
demo.put("key3","value3");
}
}).start();
new Thread(new Runnable() {
@Override public void run() {
demo.put("key4","value4");
}
}).start();
new Thread(new Runnable() {
@Override public void run() {
demo.get("key3");
}
}).start();
}
}