一、灵魂拷问
进入正题之前,依然是俗套的灵魂拷问,你准备好了吗?
- 什么是
synchronized
,它是如何使用的? synchronized
实现对象锁的两种方式以及它的原理?- 谈谈
synchronized
锁升级过程? synchronized
与volatile的区别?
不知道有没有难到你,下面就由石头我带大家由浅入深的分析这项技术。
二、基本应用
2.1 加锁方法
synchronized
有三种加锁方式,包括修饰静态方法、修饰实例方法、修饰代码块,不同的加锁方式影响锁的控制粒度,需要根据实际工程环境决定。
- 静态方法,作用于当前类对象,即加锁的粒度是类对象本身,进入该静态方法需获取到类对象的锁。
- 实例方法,作用于当前类的实例,即加锁的粒度是类的实例,进入该实例方法需获取到类实例的锁。
- 代码块,作用于指定锁对象,即加锁的粒度是指定的锁对象,进入该代码块需获取到指定对象的锁。
2.2 代码应用
public class SyncExample {
private static final Object LOCK = new Object();
private static int i = 1;
public synchronized static void increase1(){
i++;
}
public synchronized void increase2(){
i++;
}
public void increase3(){
synchronized (LOCK){
i++;
}
}
}
#increase1
方法表示的是修饰静态方法;#increase2
方法表示的是修饰实例方法;#increase1
方法表示的是修饰代码块。