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(); } }