JAVA之并发编程(一) ---理解ReentrantLock

在Lock接口出现之前,Java中的应用程序对于多线程的并发安全处理只能基于synchronized关键字来解决。但是synchronized在有些场景中会存在一些短板,也就是它并不适合于所有的并发场景。但是Java5以后,Lock的出现可以解决synchronized在某些场景中的短板,它比synchronized更加灵活。
Lock的实现类ReentrantLock(重入锁),接下来就慢慢的了解下它。
ReentrantLock是Lock的实现类,是一个互斥的同步器,在多线程高竞争条件下,ReentrantLock比synchronized有更加优异的性能表现。
Lock使用起来比较灵活,但是必须有释放锁的配合动作
Lock必须手动获取与释放锁,而synchronized不需要手动释放和开启锁
Lock只适用于代码块锁,而synchronized可用于修饰方法、代码块等。
demo代码

 static Map<String,Object> cacheMap=new HashMap<>();
    static ReentrantReadWriteLock rwl=new ReentrantReadWriteLock();
    static Lock read=rwl.readLock();
    static Lock write=rwl.writeLock();

    public static Object get(String key){
    
    
        read.lock(); //读锁 ThreadA 阻塞
        try{
    
    
            return cacheMap.get(key);
        }finally {
    
    
            read.unlock(); //释放读锁
        }
    }
    public static Object write(String key,Object value){
    
    
        write.lock(); //Other Thread 获得了写锁
        try{
    
    
            return cacheMap.put(key,value);
        }finally {
    
    
            write.unlock();
        }
    }

特性:
1.可重入锁;
2.需要手动释放;
3.公平锁

Guess you like

Origin blog.csdn.net/qq_35529931/article/details/119654661