首页 > 其他分享 >synchronized与CAS

synchronized与CAS

时间:2023-03-03 20:24:18浏览次数:31  
标签:同步 monitor synchronized CAS 对象 实例 线程

synchronized

synchronized是⼀种互斥锁,⼀次只能允许⼀个线程进⼊被锁住的代码块
synchronized是Java的⼀个关键字,它能够将代码块/⽅法锁起来
如果synchronized修饰的是实例⽅法,对应的锁则是对象实例
如果synchronized修饰的是静态⽅法,对应的锁则是当前类的Class实例
如果synchronized修饰的是代码块,对应的锁则是传⼊synchronized的对象实例

 

-- java3y《对线面试官》

 

底层原理

同步代码块是通过monitorenter和monitorexit来实现,当线程执行到monitorenter的时候要先获得monitor锁,才能执行后面的方法。当线程执行到monitorexit的时候则要释放锁

同步方法是通过中设置ACC_SYNCHRONIZED标志来实现,当线程执行有ACC_SYNCHRONI标志的方法,需要获得monitor锁。

每个对象维护一个加锁计数器,为0表示可以被其他线程获得锁,不为0时,只有当前锁的线程才能再次获得锁。

同步方法和同步代码块底层都是通过monitor来实现同步的。

每个对象都与一个monitor相关联,线程可以占有或者释放monitor。

 

--掘金社区 https://juejin.cn/post/6844903918653145102

monitor是什么

可以理解为一种同步工具,或者说是同步机制,操作系统的管程是概念原理,ObjectMonitor是它的原理实现。

对象与monitor怎么关联

  • 对象里有对象头
  • 对象头里面有Mark Word
  • Mark Word指针指向了monitor

 

标签:同步,monitor,synchronized,CAS,对象,实例,线程
From: https://www.cnblogs.com/deity-night/p/17176844.html

相关文章

  • 无锁并发,CAS等
                                         Unsafe   ......
  • 理论:第一章:HashMap底层实现原理,红黑树,B+树,B树的结构原理,volatile关键字,CAS(比较与交换)
    首先HashMap是Map的一个实现类,而Map存储形式是键值对(key,value)的。可以看成是一个一个的Entry。Entry所存放的位置是由key来决定的。Map中的key是无序的且不可重复的,所......
  • 配置CaseInsensitiveMap使key不区分大小写
    瀚高数据库目录环境文档用途详细信息环境系统平台:IBM:LinuxonSystemzRedHatEnterpriseLinux7版本:4.5.7文档用途在进行应用测试时,应用中使用Map返回结果集,键Key是区......
  • DataEase 集成 CAS 实现用户单点登录
    场景介绍随着企业IT场景越来越复杂,应用平台不断增加,用户需要管理每个应用平台的登录信息;用户集中管理平台(如:“LDAP”)可以使用户在所有应用平台使用同一个用户名进行登录;而......
  • 异步联级选择器数据回显<a-cascader>
    问题项目中会用到联级选择多级选择,因为联级数据量较大,选择了异步加载数据。每次加载选中一层的数据提交的时候会提交每一层或者最后一层的节点id到后端保存,新增的时候很......
  • webtest / testcase design / pandingbiao
    s一,判定表法的定义二,为什么要使用判定表法三,判定表法的优缺点1,优点2,缺点四,判定表法的四大组成部分五,判定表的规则与合并标准规则:六,判定表法的适用场景七,判定表法分析案例......
  • Java魔法类之Unsafe(cas)底层实现
    一、JVM层在java.util.concurrent包下面的很多类为了追求性能都采用了sun.misc.Unsafe类中的CAS操作,从而避免使用synchronized等加锁方式带来性能上的不足。在sun.misc.U......
  • Synchronized,我要一层一层剥开你的心
    三种应用方式修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁。修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁。修饰代码块......
  • java 线程安全(二)CAS操作
    为了把关于线程相关的内容搞清楚,在synchronized一节中有提到CAS这个操作一、什么是CAS?CAS,compare andswap的缩写,中文翻译成比较并交换。JDK提供的非阻塞原子性操作,它......
  • 【cassandra】cannot assign result of function system.now (type timeuuid) to time
    背景执行如下sql会失败并报如题目中的错误insertintoevent(subject,time,type)values(now(),'type');原因now()returnsatimeuuid,notatimestamp解决办......