读写锁
1、读写锁是啥
读写锁就是对Lock的细化
import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.*; /** * * 读写锁(也叫独占锁或者共享锁) * 写的时候是线程独占的,读的时候是共享的
写的时候只有一个线程在写不存在插队的情况,读的时候一个线程度,另外的线程可以插进来 * * */ public class ReadWriteLockDemo { public static void main(String[] args) { Mycache mycache = new Mycache(); for (int i = 1; i <= 5 ; i++) { final int t = i; new Thread(()->{ mycache.put(t+"",t+""); },String.valueOf(i)).start(); } for (int i = 2; i <= 40 ; i++) { final int t = i; new Thread(()->{ mycache.get(t+""); },String.valueOf(i)).start(); } } } class Mycache{ private volatile Map hashMap = new HashMap(); Lock lock = new ReentrantLock(); ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); public void put(String key,Object o){ readWriteLock.writeLock().lock(); try{ System.out.println(Thread.currentThread().getName()+"开始写入"+key); hashMap.put(key,o); System.out.println(Thread.currentThread().getName()+"写入完成"+key); }catch (Exception e){ }finally { readWriteLock.writeLock().unlock(); } } public void get(String key){ System.out.println(Thread.currentThread().getName()+"开始读取"+key); hashMap.get(key); System.out.println(Thread.currentThread().getName()+"读取完成"+key); } }