线程安全什么是synchronized关键字?synchronized实现方式1.修饰实例方法2.修饰静态方法3.修饰代码块synchronized关键字底层原理synchronized修饰实例方法monitor锁是什么?java对象内存布局synchronized修饰代码块锁优化自旋锁锁粗化锁消除锁膨胀synchronized关键字实现单例模式synchronized 和 volatile 的区别?尾语参考资料:
前言今天我们来聊聊synchronized关键字,其可以同时保证三者,实现线程安全。
线程安全在介绍synchronized关键字之前,我们得强调一下什么是线程安全,所谓线程安全:
当多个线程同时访问一个对象时, 如果不用考虑这些线程在运行时环境下的调度和交替执行, 也不需要进行额外的同步, 或者在调用方进行任何其他的协调操作, 调用这个对象的行为都可以获得正确的结果, 那就称这个对象是线程安全的 。
什么是synchronized关键字?在 java 早期版本中,synchronized 属于 重量级锁 ,效率低下;不过在 java 6 之后,java 官方对从 jvm 层面对 synchronized 较大优化,所以现在的 synchronized 锁效率也优化得非常不错。目前不论是各种开源框架还是 jdk 源码都大量使用了 synchronized 关键字
synchronized实现方式synchronized的使用其实比较简单,可以用它来修饰实例方法和静态方法,也可以用来修饰代码块。我们需要注意的是synchronized是一个对象锁,也就是它锁的是一个对象。我们无论使用哪一种方法,synchronized都需要有一个锁对象
修饰实例方法修饰静态方法修饰代码块1.修饰实例方法synchronized修饰实例方法, 在方法上加上synchronized关键字即可。
public class synchronizedtest1 { public synchronized void test() { system.out.println(synchronized 修饰 方法); }}此时,synchronized加锁的对象就是这个方法所在实例的本身,作用于当前实例加锁,进入同步代码前要获得 当前实例的锁 。
补充一个常见的面试题:构造方法可以用synchronized关键字修饰吗?
不能,也不需要,因为构造方法本身就是线程安全的
2.修饰静态方法synchronized修饰静态方法的使用与实例方法并无差别,在静态方法上加上synchronized关键字即可
public static synchronized void test(){ i++;}由于静态方法不属于任何一个实例对象,归整个类所有,不依赖于类的特定实例,被类的所有实例共享。给静态方法加synchronized锁,会作用于类的所有对象实例 ,进入同步代码前要获得 当前静态方法所在类的class对象的锁 。
有一点我们需要知道:如果一个线程 a 调用一个实例对象的非静态 synchronized 方法,而线程 b 需要调用这个实例对象所属类的静态 synchronized 方法,是允许的,不会发生互斥现象, 因为访问静态 synchronized 方法占用的锁是当前类的锁,而访问非静态 synchronized 方法占用的锁是当前实例对象锁 。
3.修饰代码块synchronized修饰代码块需要传入一个对象。
public class synchronizedtest2 { public void test() { synchronized (this) { system.out.println(synchronized 修饰 代码块); } }}此时synchronized加锁对象即为传入的这个对象实例,指定加锁对象,进入同步代码库前要获得给定对象的锁 需要注意的是这里的**this **:
synchronized(object) ,表示进入同步代码库前要获得 给定对象的锁synchronized(类.class) ,表示进入同步代码前要获得 给定 class 的锁最好不要使用 synchronized(string a) ,因为在 jvm 中,字符串常量池具有缓存功能, 如果我们多次加锁,会加锁在同一个对象上
关于多路步进电机控制系统的设计方案分析
揭秘UONI由利电动拖把成网红款之谜,原来拖地如此简单
又一个乐视的背锅侠_2017毅昌股份持续下跌
三星Exynos9系列处理器采用8nmLPP工艺首次集成NPU
赛峰公司研发出了名为Geonyx的军用导航系统,没有采用GPS
synchronized知识合集1
SLM在三维直接光刻中的多点加工
AccelerComm宣布基于Silicom N5010平台的符合5G O-RAN标准的基站加速器
Imagination 和 OTOY 共同发布突破性的硬件加速渲染平台
大族协作机器人入选深圳市第一批智能机器人应用示范典型案例
使用LabVIEW的2-Wire通信
1.2v升压电路图
加紧半导体回流本土,美国又盯上了 PCB 和先进芯片封装
锂电隔膜涂覆自动化产线--琅菱又一倾心制造
5G的到来给运营商带来了什么
通信网络数据流量倒流应对策略
信号量和自旋锁
华为P20采用“刘海”屏幕,余承东:已经做到最美观
TWS耳机2020全球出货量将达2.3亿套
夏普冰箱SJ-DX80F-WH评测 带来不一样的生活体验