synchronized与CAS(更新)

本文详细探讨了Java中的synchronized关键字及其原理,包括原子性、可见性和有序性的保证。同时,介绍了轻量级锁CAS的工作机制,以及解决ABA问题的方法。还涉及到对象的创建过程、内存布局和锁升级的细节,包括锁消除、锁粗化和锁降级等优化策略。
摘要由CSDN通过智能技术生成

synchronized(重量级锁)

synchronized概念

原子性:synchronized保证语句块内操作是原子的
可见性:synchronized保证可见性(通过“在执行unlock之前,必须先把此变量同步回主内存”实现)
有序性:synchronized保证有序性(通过“一个变量在同一时刻只允许一条线程对其进行lock操作”)

synchronized原理

Java字节码层级:

synchronized(o) 

字节码层级:
使用javap -c Synchronize可以查看编译之后的具体信息。monitorenter指令插入到同步代码块的开始位置,monitorexit指令插入到同步代码块的结束位置,JVM需要保证每一个monitorenter都有一个monitorexit与之相对应。任何对象都有一个monitor(在对象头中)与之相关联,当且一个monitor被持有之后,他将处于锁定状态。线程执行到monitorenter指令时,将会尝试获取对象所对应的monitor所有权,即尝试获取对象的锁;
在这里插入图片描述
CPU汇编层级:lock comxchg


CAS(轻量级锁)

CAS概念

在这里插入图片描述

Compare And Swap (Compare And Exchange) / 自旋 / 自旋锁 / 无锁 (无重量锁),作用是保证多个线程对一个线程的更新。

CAS底层

自己写过的原子类:

        AtomicInteger i = new AtomicInteger();
        i.incrementAndGet();

点击incrementAndGet(),跳转到unsafe类:

    public final int incrementAndGet() {
   
        return unsafe.getAndAddInt(this, valueOffset, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值