速记-synch和 Reentr

synchronized 和 ReentrantLock 都是用于多线程同步的机制,其区别如下:

锁的获取和释放机制:synchronized 的获取和释放锁的机制是隐式的,由 JVM 来控制;而 ReentrantLock 则是通过代码显式地获取和释放锁。

性能:synchronized 是 JVM 实现的一种内置锁,由 JVM 负责控制锁的加锁和解锁,相对来说性能较高;而 ReentrantLock 则是基于 AQS 的,相对来说开销更大。

可中断性:在获取锁时,如果线程不能立即获取到锁,synchronized 的方式只能一直等待锁的释放,而 ReentrantLock 提供了可中断获取锁的方式。

公平性:synchronized 不保证锁的公平性,而 ReentrantLock 可以通过构造函数来指定锁是否公平。

等待通知机制:synchronized 在等待唤醒时,是由 JVM 来实现的,而 ReentrantLock 则是通过 Condition 来实现等待和唤醒的。

总之,synchronized 是 Java 中的一种内置锁,适用于简单的多线程同步控制;而 ReentrantLock 则是更为灵活和高级的多线程同步机制,适用于复杂的同步控制场景。
全部评论

相关推荐

05-16 15:54
已编辑
重庆邮电大学 Java
内容研发部1.线程池的好处?2.怎么创建一个线程池3.线程池拒绝策略有哪些*4.由调用线程来执行的应用场景是什么5.怎么给线程池中的线程制定名字呢?6.你在平时工作中怎么来制定你的核心线程数和最大限程数7.如何验证你的制定方案确实有效?8.你的动态线程池中间件怎么去发现你的线程池呢9.redis的哈希槽怎么分布?CRC16校验后得到的是什么?*10.redis的一个abcd这个类型跟1234这个类型哪个占用空间大一些*11.JVM溢出的时候,我要存储他溢出那一刻的快照怎么做呢?12.什么是责任链模式?13.责任链模式怎么把每个节点串起来?具体怎么做?14.你项目里的责任链是写死的吗?我要改怎么办?15.mysql如何遍历千万数据的表?从第一条到最后一条,怎么遍历效率最高?具体的遍历方式?16.RocketMQ怎么实现事务消息?17.RocketMQ怎么实现一致性?算法:有20个任务,每个任务里面做的事情是:睡眠2秒后,打印Hello World。使用拥有20个线程的线程池来执行这些任务,需要通过拥有5个许可的信号量来控制执行的并发面试官应该是leader级别的,引导性还可以;不过对问题的对错看得比较重,我回答风格比较啰嗦,喜欢发散思维,偶尔能感觉得到他的不耐烦,加上被遮掩的背景和时不时打断我思路的背景音,面试体验2.5颗星(顺便说说这个面试官是真的很喜欢线程池)
查看18道真题和解析 腾讯音乐求职进展汇总
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务