社区
Java
帖子详情
sychronized为什么效率比ReentrantLock低?
sunshine1027
2017-07-09 10:24:28
首先申明:这里说的效率低,是只考虑重量级锁、多线程高并发的情况。
众所周知,sychronized本身是用监视器锁实现的,操作系统底层用的是互斥锁。实际上实现方式是先一次CAS,失败则进入队列。
ReentrantLock默认的非公平锁,实现上也是先一次CAS,失败再进AQS实现的队列。
既然2个的实现方式都差不多,那为什么sychronized比ReentrantLock的效率要低呢?
...全文
316
回复
打赏
收藏
sychronized为什么效率比ReentrantLock低?
首先申明:这里说的效率低,是只考虑重量级锁、多线程高并发的情况。 众所周知,sychronized本身是用监视器锁实现的,操作系统底层用的是互斥锁。实际上实现方式是先一次CAS,失败则进入队列。 ReentrantLock默认的非公平锁,实现上也是先一次CAS,失败再进AQS实现的队列。 既然2个的实现方式都差不多,那为什么sychronized比ReentrantLock的效率要低呢?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Java中的
Sychronized
锁和 Re
entr
ant
Lock
锁的区别?除此之外还有那些锁?
(5)
sychronized
锁的是对象,锁信息保存在对象头中,而Re
entr
ant
Lock
通过代码中的int类型的state标识来标志锁的状态。(2)
sychronized
会自动的加锁和释放锁,而Re
entr
ant
Lock
需要程序员手动加锁和释放锁。(3)
sychronized
底层是JVM层面的锁,而Re
entr
ant
Lock
是API层面的锁。(4)
sychronized
是公平锁,而Re
entr
ant
Lock
可以选择公平锁或非公平锁。(6)
sychronized
底层有一个锁升级的过程。
Sychronized
Re
entr
ant
Lock
类锁 对象锁
如标题所描述,在一个demo里展示了这四种锁的区别。 类锁会造成类中的所有同步方法都被阻塞执行,对象锁能保证一个对象在多线程中的安全性。假设现在有一个order,金额是100元,oder中的方法E和E_1使用了类锁 order如下: package com.kafkaDemo.
sychronized
; import java.util.concurrent.
lock
s.
Lock
; import java.util.concurrent.
lock
s.Re
entr
ant
Lock
; public class
线程同步的方法:
sychronized
、
lock
、re
entr
ant
Lock
等
线程同步的方法:
sychronized
、
lock
、re
entr
ant
Lock
等。 如果你向一个变量写值,而这个变量接下来可能会被另一个线程所读取,或者你从一个变量读值,而它的值可能是前面由另一个线程写入的,此时你就必须使用同步。
sychronized
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码,它是在 软件层面依赖JVM实现同...
【多线程学习笔记】
sychronized
关键字底层原理、
sychronized
与Re
entr
ant
Lock
、volatile和synchronized
文章目录
sychronized
释义synchronized关键字最主要的三种使用方式:synchronized底层原理:同步代码块:同步方法当前类的class对象作为锁Synchronized与Re
entr
ant
lock
的区别关于可重入锁 可中断锁 公平锁和非公平锁的概念Re
entr
ant
Lock
是如何实现可重入性的?
sychronized
释义 synchronized关键字解决的是【多个线程之间访问资源的同步性】,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行
多线程面试—锁、
sychronized
、Re
entr
ant
Lock
、AQS
1.锁 互斥锁、自旋锁、读写锁,都是属于悲观锁。 1.互斥锁、自旋锁——最底层的锁 1.1.互斥锁 1.1.1独占与加锁失败 互斥锁加锁失败后,线程会释放 CPU ,给其他线程; 互斥锁是一种独占锁,比如当线程 A 加锁成功后,此时互斥锁已经被线程 A 独占了,只要线程 A 没有释放手中的锁,线程 B 加锁就会失败,于是就会释放 CPU 让给其他线程,既然线程 B 释放掉了 CPU,自然线程 B 加锁的代码就会被阻塞。 对于互斥锁加锁失败而阻塞的现象,是由操作系统内核实现的。当加锁失败时,内核
Java
51,407
社区成员
86,126
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章