可重入锁,指的就是在一段同步代码块中,同一个锁只能同时被一个线程所持有,所以当一个线程执行一段同步代码块的时候,从a方法进入到b方法,会自动获取锁,而不会被其他的线程所抢占。
private static ReentrantLock lock = new ReentrantLock();
public static void main(String[] args) {
new Thread(() -> {
a();
}, "我是线程1").start();
new Thread(() -> {
b();
},"我是线程2").start();
}
private static void a(){
lock.lock(); // 获取锁
System.out.println(Thread.currentThread().getName()+"a.....");
try {
Thread.sleep(2000);
b(); //调用b方法
} catch (InterruptedException e) {
e.printStackTrace();
}
lock.unlock(); // 释放锁
}
private static void b(){
lock.lock(); //获取锁
System.out.println(Thread.currentThread().getName()+"b.....");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
lock.unlock(); //释放锁
}
执行结果为:
我是线程1a.....
我是线程1b.....
我是线程2b.....
Process finished with exit code 0