Synchronized的基本认识

Synchronized在Java中用于实现线程同步,其工作过程包括获取互斥锁、拷贝变量到工作内存、执行代码、刷新到主内存及释放锁。关键特性包括互斥性、内存刷新、可重入和对指令重排序的约束。使用方式有修饰代码块、修饰普通方法和静态方法。Synchronized的锁机制始于乐观锁,根据冲突情况升级为悲观锁,经历无锁、偏向锁、自旋锁到重量级锁的过程,且是非公平锁。
摘要由CSDN通过智能技术生成

Synchronized的工作过程:

(1)获得互斥锁

(2)从主内存拷贝变量的最新副本到工作的内存

(3)执行代码

(4)将修改后的共享变量刷新到主内存

(5)释放互斥锁

Synchronized的特性

(1)互斥:某个线程执行到某个对象的Synchronized中时,其他线程如果也执行到同一个对象的Synchronized就会阻塞等待,保证执行代码块的原子性

(2)刷新内存:会保证内存可见性(对值的修改能够被其他线程及时看到)

(3)可重入:不会把自己锁死

(4)对指令重排序有一定的约束

Synchronized的使用

(1)修饰代码块:明确指出锁的是哪个对象

(2)直接修饰普通方法:锁的是该实例

(3)修饰静态方法:锁的是类对象(XXX.class)

Synchronized的锁机制

最开始是乐观锁,如果锁的冲突频繁,就转为悲观锁

最开始是轻量级锁实现,如果锁的持有时间较长,就转为重量级锁

是一种不公平锁

不是读写锁

加锁过程:无锁-》偏向锁-》自旋锁-》重量级锁

偏向锁只是给对象头打上一个标记,记录这个锁属于哪个线程,本质上偏向于延迟加锁,如果没有其他线程来参与竞争就不会去真的加锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值