本文共 1397 字,大约阅读时间需要 4 分钟。
// 加锁的class MyCacheLock{ private volatile Mapmap = 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(key,value); System.out.println(Thread.currentThread().getName()+"写入OK"); } catch (Exception e) { e.printStackTrace(); } finally { readWriteLock.writeLock().unlock();//释放写锁 } } / / 取,读,所有人都可以读! public void get(String key){ readWriteLock.readLock().lock(); try { System.out.println(Thread.currentThread().getName()+"读取"+key); Object o = map.get(key); System.out.println(Thread.currentThread().getName()+"读取OK"); } catch (Exception e) { e.printStackTrace(); } finally { readWriteLock.readLock().unlock(); } }}public class ReadWriteLockDemo { public static void main(String[] args) { MyCache myCacheLock = new MyCacheLock(); // 写入 for (int i = 1; i <= 5 ; i++) { final int temp = i; new Thread(()->{ myCacheLock .put(temp+"",temp+""); },String.valueOf(i)).start(); } // 读取 for (int i = 1; i <= 5 ; i++) { final int temp = i; new Thread(()->{ myCacheLock .get(temp+""); },String.valueOf(i)).start(); } }}
转载地址:http://sohzi.baihongyu.com/