面试-synchronized(java5以前唯一)和ReentrantLock的区别

1.ReentrantLock(再入锁):
(1).在java.util.concurrent.locks包
(2).和CountDownLatch,FutureTask,Semaphore一样基于AQS实现。
AQS:AbstractQueuedSynchronizer
队列同步器。Java并发用来构建锁或其他同步主键的基础框架,是j.u.c package的核心。一般使用的方式是继承。还有各种基于CAS的基础操作方法。
AQS的核心内容:state以及先入先出的等待线程队列等待
在这里插入图片描述
利用AQS实现同步结构,至少调用两种方法。分别是acquire方法,获取资源的独占权。Realease释放对于某个资源的独占。
(3).能够实现比synchronized更细力度的控制。如:控制fairness(公平性)
(4).调用lock()之后,必须调用unlock()释放锁
(5).性能未必比synchronized高,并且也是可重入的。在低竞争场景中synchronized可能相对优势。

ReentrantLock公平性设置:
0,1相继获取(每个线程获取到锁的概率是一样的)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
ArrayBlockingQueue
数组实现的线程安全的,有界的阻塞队列。内部通过互斥锁保护线程资源。互斥锁是通过
ReentrantLock实现的。
ArrayBlockingQueue与newCondition是组合关系
newCondition依赖于ArrayBlockingQueue实现
ArrayBlockingQueue通过await()和signal()的组合优雅的完成条件判断和通知等待

在这里插入图片描述
在这里插入图片描述
实际应用场景:ArrayBlockingQueue是数组实现的,线程安全的,有界的阻塞队列。内部互斥锁是通过ReentrantLock实现的。

总结:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值