可重入锁,也叫做递归锁,是指在同一个线程在调外层方法获取锁的时候,再进入内层方法会自动获取锁。ReentrantLock 和synchronized 都是 可重入锁。可重入锁的一个好处是可一定程度避免死锁。
/** * @author chenhongshan * @date 2020/9/4 */ public class LockTest implements Runnable { public synchronized void get(){ System.out.println(Thread.currentThread().getName()+"="+ Thread.currentThread().getId()); set(); } public synchronized void set(){ System.out.println(Thread.currentThread().getName()+"="+ Thread.currentThread().getId()); } @Override public void run() { get(); } public static void main(String[] args) { LockTest lockTest = new LockTest(); new Thread(lockTest).start(); new Thread(lockTest).start(); new Thread(lockTest).start(); } } import java.util.concurrent.locks.ReentrantLock; /** * @author chenhongshan * @date 2020/9/4 */ public class ReenLockTest implements Runnable { ReentrantLock reentrantLock = new ReentrantLock(); public void get(){ reentrantLock.lock(); System.out.println(Thread.currentThread().getId()); set(); reentrantLock.unlock(); } public void set(){ reentrantLock.lock(); System.out.println(Thread.currentThread().getId()); reentrantLock.unlock(); } @Override public void run() { get(); } public static void main(String[] args) { ReenLockTest reenLockTest = new ReenLockTest(); new Thread(reenLockTest).start(); new Thread(reenLockTest).start(); new Thread(reenLockTest).start(); } }