1 /** 2 /** * 独占锁(写锁)睿共享 3 一次只能被一个线程占有 4 * 共享锁(读锁) 多个线程可以同时占有 5 * * ReadWriteLock 6 * 读-读 可以共存! 7 * 读-写 不能共存! 8 * 写-写 不能共存! 9 * readWriteLock 10 */ 11 public class ReadWriteLockDmoe { 12 public static void main(String[] args) { 13 MyCacheLock c = new MyCacheLock(); 14 //写入 15 for (int i =睿共享 1; i <= 5; i++) { 16 int temp = i; 17 new Thread(() -> { 18 c.put(temp + "", temp + ""); 19 }, String.valueOf(i)).start(); 20 } 21 22 //读取 23 for (int i = 1; i <= 5; i++) { 24 int temp = i; 25 new Thread(() -> { 26 c.get(temp + ""); 27 }, String.valueOf(i)).start(); 28 } 29 } 30 31 } 32 33 /** 34 * 加锁 35 */ 36 class MyCacheLock { 37 private volatile Mapmap = new HashMap<>(); 38 ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); 39 40 41 //存写 ,写入的时候只希望同时只有一个线程写 42 public void put(String key, Object value) { 43 readWriteLock.writeLock().lock(); 44 try { 45 System.out.println(Thread.currentThread().getName()+"写入"+key); 46 map.put(key, value); 47 睿共享 System.out.println(Thread.currentThread().getName()+"写入OK!"); 48 }catch (Exception e){ 49 e.printStackTrace(); 50 }finally { 51 readWriteLock.writeLock().unlock(); 52睿共享 } 53 54 } 55 56 //取读 所有人可以读 57 public void get(String key) { 58 readWriteLock.readLock().lock(); 59 try { 60 System.out.println(Thread.currentThread().getName() + "读取" + key); 61 Object o = map.get(key); 62 System.out.println(Thread.currentThread().getName() + "读取OK"); 63 } catch (Exception e) { 64 e.printStackTrace(); 65 } finally { 66 readWriteLock.readLock().unlock(); 67 } 68 } 69 } 70 71 72 /** 73 * 74 */ 75 class MyCache { 76 private volatile Mapmap = new HashMap<>(); 77 78 //存写 79 public void put(String key, Object value) { 80 System.out.println(Thread.currentThread().getName() + "写入" + key); 81 map.put(key, value); 82 System.out.println(Thread.currentThread( 睿共享 ).getName() + "写入OK!"); 83 } 84 85 //取读 86 public void get(String key) { 87 System.out.println(Thread.currentThread().getName() + "读取" + key); 88 Object o = map.get(key); 89 System.out.println(Thread.currentThread().getName() + "读取OK"); 90 } 91 }