// 锁的重入,synchronized是可重入的
public class Demo {
public synchronized void a(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("a");
b(); // 这里不会产生死锁,这是重入锁的概念:可重入锁,也叫做递归锁,指的是同一线程外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。
}
public synchronized void b(){
System.out.println("b");
}
public static void main(String[] args) {
Demo d = new Demo();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
d.a();
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
d.b();
}
});
t1.start();
t2.start();
}
}
这里执行结果是
a
b
b
而不会出现死锁问题,这就是重入锁。非常简单!