- 偏向锁
适合在只有一个线程执行同步代码时,提升性能
线程进入同步代码块是,会通过CAS(compare and swap)操作,设置对象头的锁标志位,如果标志位的线程id为空,则设置为当前线程id,成功获得锁;如果不为空,判断是否是当前线程,如果是,成功获得锁,如果不是,说明有其它线程访问过,则升级为轻量级锁。 - 轻量级锁
适合在两个线程交替执行的时候,并发程度小,提升性能
jvm在当前线程栈帧中设置锁记录,然后通过CAS操作把对象头的轻量级锁的指针指向锁记录,如果失败,先检查是否已获得锁,未获得,则会自旋,自旋多次后仍然失败,升级为重量级锁 - 重量级锁
适合高并发的场景
通过CAS操作将monitor的owner设置为当前线程,如果成功,获得锁,或者重入加1,否则未获得锁,线程会被挂起,在等待队列里等待被系统唤醒
sychronized原理
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 0 前言 记得开始学习Java的时候,一遇到多线程情况就使用synchronized,相对于当时的我们来说sync...
- 记得开始学习Java的时候,一遇到多线程情况就使用synchronized,相对于当时的我们来说synchroni...
- 0 前言 记得开始学习Java的时候,一遇到多线程情况就使用synchronized,相对于当时的我们来说sync...
- synchronized和volatile在java并发领域扮演者重要的角色。其中,synchronized一直给...
- 前言 记得开始学习Java的时候,一遇到多线程情况就使用synchronized,相对于当时的我们来说synchr...