13. 显式锁:Lock接口

显式锁是自JDK1.5开始引入的排它锁

显式锁的使用

方法 注释
void lock() 获取锁
void lockInterruptibly() throws InterruptedException 获取锁,如果处于阻塞状态,可以中断
boolean tryLock() 尝试获取锁,如果能获取到锁,则返回true
boolean tryLock(long time, TimeUnit unit) throws InterruptedException 尝试获取锁,有超时时间,可以被中断
void unlock() 释放锁
Condition newCondition() 返回绑定到此Lock实例的新Condition实例
// 创建锁实例
public final Lock lock = ...;

// 申请锁
lock.lock();

try {

} catch(...) {

} finally { // 避免锁泄漏
  // 释放锁
  lock.unlock();
}
image.png

ReentrantLock(可重入锁)

ReentrantLock既支持公平锁,又支持非公平锁。

// 默认构造方法是非公平锁
public ReentrantLock() {
  sync = new NonfairSync();
}

// fair参数设置为true,则为公平锁,否自为非公平锁
public ReentrantLock(boolean fair) {
  sync = fair ? new FairSync() : new NonfairSync();
}
image.png

公平锁的开销比非公平锁的开销要大

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在Java5.0之前,在协调对共享对象的访问时可以使用的机制只有synchronized和volatile。 Ja...
    好好学习Sun阅读 529评论 0 3
  • Lock显式锁 在Java 5.0之前,在协调对共享对象的访问时可以使用的机制只有synchronized和vol...
    史路比阅读 465评论 0 0
  • 临近期末,在学业成绩的压迫下,学生、家长、老师各种焦虑,于是打孩子的现象就多了起来。还是有许多孩子把“打”,当成了...
    俞老师阅读 1,293评论 0 5
  • 今天来谈一下心理账户,首先介绍一下,“心理账户”是芝加哥大学行为科学教授查德·塞勒提出的概念,人们在消费决策时把过...
    权世界_星星阅读 3,648评论 0 1
  • 乱绪 乱了的思绪如五月的风 轻灵 透着些许迷茫 在天空自由飞扬 哪里才是 安静停留的地方 别后的故事缓缓如歌流淌 ...
    njlinda阅读 262评论 0 3