可重入锁(递归锁)

2024-07-14 16:19

可重入锁(递归锁)

​ 在同一个线程在外层方法获取锁的时候,再进入该线程的内层方法会自动获取锁(前提,锁对象得是同一个对象),不会因为之前已经获取过还没释放而阻塞。

如果是1个有 synchronized 修饰的递归调用方法,程序第2次进入被自己阻塞了岂不是天大的笑话,出现了作茧自缚。所以Java中ReentrantLock和synchronized

都是可重入锁,可重入锁的一个优点是可一定程度避免死锁。

示例:

public class ReentryLockMain {
    private static final Object reetryLockA = new Object();
    public static void main(String[] args) {
        Thread a = new Thread(() -> {
            reLock();
        }, "a");
        a.start();
        try {
            a.join();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    private static int i=0;
    public static void reLock(){
        synchronized (reetryLockA){
            if(i==5){
                return ;
            }else{
                i++;
                System.out.println(i+"调用");
                //递归调用
                reLock();
            }
        }
    }
}
相关新闻
热点
投票
查看结果
Tags

站点地图 在线访客: 今日访问量: 昨日访问量: 总访问量:

© 2025 个人网站 版权所有

备案号:苏ICP备2024108837号

苏公网安备32011302322151号