package servlet.test;
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;
public class ReadWriteLockTest {
private Map<String, Object> map = new HashMap<>();
private ReadWriteLock lock = new ReentrantReadWriteLock(false);
private Lock rlock = lock.readLock();
private Lock wlock = lock.writeLock();
/**
* @param args
*/
public static void main(String[] args) {
final ReadWriteLockTest readWriteLockTest = new ReadWriteLockTest();
new Thread(){
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub
readWriteLockTest.put("abc", "abc");
}
}.start();
new Thread(){
@Override
public void run() {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub
System.out.println(readWriteLockTest.get("abc"));
}
}.start();
}
public Object get(String key) {
rlock.lock();
try {
return map.get(key);
} finally {
rlock.unlock();
}
}
public Object put(String key, Object value) {
wlock.lock();
try {
return map.put(key, value);
} finally {
wlock.unlock();
}
}
}