Java并发 - 初识 可重入锁&非重入锁

可重入锁

可重入锁又名递归锁。是指在同一个线程在外层方法获取锁之后,在进入该线程的内层方法会自动获取锁(前提锁对象是同一个对象或者class),不会因为之前获取过还没释放而阻塞。Java中synchronized和ReentrantLook都是可重入锁。可重入锁的优点是可以一定程度上避免死锁。代码如下:

public class Test{
    public synchronized void doOne() {
        System.out.println("方法1执行...");
        doTwo();
    }

    public synchronized void doTwo() {
        System.out.println("方法2执行...");
    }
}

如图方法中,类中两个方法都被内置锁synchronized修饰。因为内置锁是可重入的,线程在执行外层方法doOne时获取到锁,在执行内部方法doTwo时可以直接获取当前对象的锁。

非重入锁

而如果是不可重入锁,执行到doTwo时,就必须是当前线程释放掉执行doOne时获取的锁,实际上锁已被当前对象拥有且无法释放。就会造成死锁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静为躁君S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值