并发编程 线程安全——Lock

lock

概述:

本质上Lock仅仅是一个接口
Lock有三个实现类

  • ReentrantLock:表示重入锁 它是唯一一个实现了Lock接口的类
    重入锁指的是线程在获得锁之后 再次获取该锁不需要阻塞 而是直接关联一次计数器增加重入次数
  • ReentrantReadWriteLock:重入读写锁 它实现了ReadWriteLock接口
    在这个类中维护了两个锁
    • ReadLock:读锁
    • WriteLock:写锁

示例:

Lock l = ...; //根据不同的实现Lock接口类的构造函数得到一个锁对象 
l.lock(); //获取锁位于try块的外面 
try { 
      // 代码块
} finally { 
     l.unlock(); // 推荐把锁放到finally中 这样不管怎样都会被释放
}

接口方法:

//尝试获取锁,获取成功则返回,否则阻塞当前线程
void lock(); 

//尝试获取锁,线程在成功获取锁之前被中断,则放弃获取锁,抛出异常 
void lockInterruptibly() throws InterruptedException; 

//尝试获取锁,获取锁成功则返回true,否则返回false 
boolean tryLock(); 

//尝试获取锁,若在规定时间内获取到锁,则返回true,否则返回false,未获取锁之前被中断,则抛出异常 
boolean tryLock(long time, TimeUnit unit) throws InterruptedException; 

//释放锁
void unlock(); 

//返回当前锁的条件变量,通过条件变量可以实现类似notify和wait的功能,一个锁可以有多个条件变量
Condition newCondition();

推荐文章:一文带你理解 Java 中 Lock 的实现原理

posted @ 2021-08-12 10:11  熏晴微穗  阅读(72)  评论(0编辑  收藏  举报