synchronized锁重入
关键字synchronized
拥有锁重入的功能,也就是在使用synchronized
时,当一个线程得到一个对象锁之后,再次请求此对象锁是可以再次得到该对象的锁的。这也说明一个synchronized
方法/块的内部调用本类的其他synchronized
方法/块时,是永远可以得到锁的
重入锁: 自己可以再次获取自己内部锁
测试用例:
public class ServiceSyn {
public synchronized void service1(){
System.out.println("into service1");
service2();
}
public synchronized void service2(){
System.out.println("into service2");
service3();
}
public synchronized void service3(){
System.out.println("into service3");
}
public static void main(String[] args) throws InterruptedException {
new Thread(){
@Override
public void run() {
ServiceSyn serviceSyn = new ServiceSyn();
serviceSyn.service1();
}
}.start();
Thread.sleep(2000);
}
}
结果:
into service1
into service2
into service3
可以看到,service2
成功获取service1
的锁,而service3
也能成功获取service2
的锁