大致明白ReentrantLock,Synchronized

俩者共同点:1:都是可重入的(简单解释就是第一次获取锁,第二次可以不用和别的线程竞争再次获取锁资源)

2:都是独占锁(简单解释就是锁某个时刻只能被一个线程持有,对比共享形式可以有多个线程同时持有,Rreentrantwritereadlock的读锁就是可以共享的)

不同点:.synchronized 关键字 属于JVM层面的实现,所以可提供的功能简单: reentrantLock 属于Java语言层面,相比来说有很多功能使用与不同的业务场景.

举例:

1.等待可中断,持有锁的线程长期不释放的时候,正在等待的线程可以选择放弃等待,这相当于Synchronized来说可以避免出现死锁的情况。通过lock.lockInterruptibly()来实现这个机制

2:公平锁:Synchronized是非公平锁的实现,ReentrantLock提供了公平与非公平的实现.

公平锁与非公平锁的创建方式,公平锁会按照线程申请锁的时间顺序来优先获取锁.实现方式使用AQS维护了一个等待队列

图中标红处使用LockSupport了实现了线程等待.同样再unlock方法中就用了唤醒操作。

后续不同点再更新.

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值