当一个线程得到对象锁后,再次请求此对象锁时是可以再次得到改对象的锁的
“可重入锁”的概念:自己可以再次获得自己内部的锁,比如有一条线程获得了某个对象的锁,此时这个对象的锁还没有释放,当再次获取这个对象的锁的时候还是可以获取的,如果不可锁重入的话就会造成死锁。
例如:synchronized和ReentranLock都是可重入锁
public class Service {
synchronized public void service1(){
System.out.println("service1");
service2();
}
synchronized public void service2(){
System.out.println("service2");
service3();
}
synchronized public void service3(){
System.out.println("service3");
}
}
public class MyThread extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
Service service = new Service();
service.service1();
}
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
}
}
打印结果:
service1
service2
service3