package sync; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @author : CodeWater * @create :2022-06-02-22:49 * @Function Description :可重入锁演示 * */ //可重入锁 public class SyncLockDemo { public synchronized void add() { add(); } public static void main(String[] args) { //Lock演示可重入锁 Lock lock = new ReentrantLock(); //创建线程 new Thread(()->{ try { //上锁 lock.lock(); System.out.println(Thread.currentThread().getName()+" 外层"); try { //上锁 lock.lock(); System.out.println(Thread.currentThread().getName()+" 内层"); }finally { //释放锁 lock.unlock(); } }finally { //释放做 lock.unlock(); } },"t1").start(); //创建新线程 new Thread(()->{ lock.lock(); System.out.println("aaaa"); lock.unlock(); },"aa").start(); // new SyncLockDemo().add(); //递归锁演示 // synchronized //可重入锁演示 // Object o = new Object(); // new Thread(()->{ // synchronized(o) { // System.out.println(Thread.currentThread().getName()+" 外层"); // // synchronized (o) { // System.out.println(Thread.currentThread().getName()+" 中层"); // // synchronized (o) { // System.out.println(Thread.currentThread().getName()+" 内层"); // } // } // } // // },"t1").start(); } }