博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java并发编程的艺术(三)synchronized的应用
阅读量:4887 次
发布时间:2019-06-11

本文共 693 字,大约阅读时间需要 2 分钟。

1、利用synchronized实现同步的基础:Java中的每一个对象都可以作为

(1)对于普通同步方法,锁是当前实例对象

(2)对于静态同步方法,锁是当前类的Class对象

(3)对于同步方法块,锁是Synchronized括号里配置的对象

 

2、synchronized在JVM中的实现原理:JVM基于进入和退出Monitor对象来实现方法同步代码块同步。任何对象都有一个monitor与之关联。

 

3、synchronized用的锁是存在Java对象头中的Mark Word里,Mark Word默认存储对象的HashCode、分代年龄和锁标志位,在运行期间Mark Word里存储的数据会随着锁标志位的变化而变化,长度由虚拟机位数决定(32/64bit)。

 

4、JavaSE1.6中锁分为4种状态(级别从低到高):无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态,锁可以升级但不能降级,目的是为了提高获取锁和释放锁的效率。

 

5、锁的优缺点对比

优点 缺点 适用场景
偏向锁 加锁和解锁不需要额外的消耗,和执行非同步方法相比仅存在纳秒级的差距 如果线程间存在锁竞争,会带来额外的锁撤销的消耗 适用于只有一个线程访问同步块场景
轻量级锁 竞争的线程不会阻塞,提高了程序的响应速度 如果始终得不到锁竞争的线程,使用自旋会消耗CPU 追求响应时间,同板块执行速度非常快
重量级锁 线程竞争不使用自旋,不会消耗CPU 线程阻塞,响应时间缓慢 追求吞吐量,同步块执行速度较长

 

转载于:https://www.cnblogs.com/xy80hou/p/11217040.html

你可能感兴趣的文章
Palindrome Number
查看>>
PHP命名空间(Namespace)的使用详解
查看>>
java项目@override报错问题
查看>>
DataTable 和Json 字符串互转
查看>>
Redis安装 java中的连接 序列化 反序列化
查看>>
hdu 1896 优先队列的应用
查看>>
OpenGL 头文件,库文件
查看>>
点与不规则图形关系判断
查看>>
iOS 自定义控件--重写一些方法
查看>>
第二次冲刺作业
查看>>
【转】HTML, CSS和Javascript调试入门
查看>>
蓝桥历年试题 套娃
查看>>
微信支付体验
查看>>
Thinkphp 3.2笔记
查看>>
RHEL7开机不能正常进入系统(图形化界面)
查看>>
Android开发环境搭建完全图解
查看>>
详解BOM头以及去掉BOM头的方法
查看>>
PHP 手机浏览器访问网站获取手机相关信息方法集锦
查看>>
09年电子竞赛参赛技巧经验11条(转载)
查看>>
CSS颜色
查看>>