300元3小时服务不限次数-400块钱3小时无限次快餐,500一晚同城约茶,风楼阁交友平台

千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:成都千锋IT培训  >  技术干货  >  编程中各种锁都有什么区别?

编程中各种锁都有什么区别?

来源:千锋教育
发布人:xqq
时间: 2023-10-14 04:13:36

一、编程中各种锁的区别

1. ReentrantLock底层实现依赖于特殊的CPU指令

Java1.5引入了Lock接口以及相关的实现类,提供了和synchronized类似的同步功能。相比synchronized的隐式加锁和释放。Lock需要手动操作。少了便捷性,但却可以更加灵活和高效。

ReentrantLock底层实现依赖于特殊的CPU指令,比如发送lock指令和unlock指令,不需要用户态和内核态的切换,所以效率高(这里和volatile底层原理类似),而synchronized底层由监视器锁(monitor)是依赖于底层的操作系统的Mutex Lock需要用户态和内核态的切换,所以效率低。

2. 同步器是实现同步组件的关键,锁是面向使用者的

同步器是实现同步组件的关键,锁是面向使用者的,它定义了使用者与锁交互的接口,隐藏了实现的细节;同步器面向的是锁的实现者,它简化了锁的实现,屏蔽了同步状态管理、线程的排队、等待与唤醒等底层实现。锁和同步器很好的隔离了使用者和实现者所关注的领域。只有掌握了同步器的工作原理才能更深入地理解并发包中其他的并发组件。

3. 重入锁ReentrantLock支持一个线程对资源的重复枷锁

重入锁ReentrantLock支持一个线程对资源的重复枷锁,该线程自己不会阻塞自己。常用的使用方式如下class X {

private final ReentrantLock lock = new ReentrantLock();

public void m() {

lock.lock(); // block until condition holds

try {

// … method body

} finally {

lock.unlock()

}

}

}

4. ReentrantReadWriteLock读写锁可以允许同一时刻多个读线程访问

ReentrantLock是排他锁,即同一时刻只允许一个线程进行访问,而ReentrantReadWriteLock读写锁可以允许同一时刻多个读线程访问,但在写线程访问时,所有的多线程和其他的写线程都会被阻塞;如果存在读锁,正在持有中,则写锁不能被获取,要等待当前激活的读锁释放。通过维护一个读锁和一个写锁,分离读和写,使得并发性有很大的提升。

延伸阅读:

二、Condition

获取一个Condition必须通过Lock的newCondition()方法。重用的方法如下

await() throw InterruptedException: 当前线程进入等待状态知道被通知或者中断,当前线程进入运行状态且从await()方法返回awaitUninterruptibly(): 对中断不敏感的awaitawaitNanos(long nanosTimeout) throw InterruptedException:在await的基础上增加了超时被中断的功能signal() 唤醒一个等待在Condition上的线程,该线程从等待方法返回前必须获取与Condition相关联的锁signalAll().唤醒所有在等待Condition的线程


以上就是关于编程中各种锁都有什么区别的内容希望对大家有帮助。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

java的数据结构与C语言的数据结构有什么区别与联系?

2023-10-14

okr有什么用?

2023-10-14

51单片机和52单片机区别是什么?

2023-10-14

最新文章NEW

环形缓冲区为什么是lock-free的?

2023-10-14

oracle数据库库中两个表之间怎么同步数据?

2023-10-14

除了数据库与编译器Lex和Yacc还可以用来做什么?

2023-10-14

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>