速记-synch和 Reentr
synchronized 和 ReentrantLock 都是用于多线程同步的机制,其区别如下:
锁的获取和释放机制:synchronized 的获取和释放锁的机制是隐式的,由 JVM 来控制;而 ReentrantLock 则是通过代码显式地获取和释放锁。
性能:synchronized 是 JVM 实现的一种内置锁,由 JVM 负责控制锁的加锁和解锁,相对来说性能较高;而 ReentrantLock 则是基于 AQS 的,相对来说开销更大。
可中断性:在获取锁时,如果线程不能立即获取到锁,synchronized 的方式只能一直等待锁的释放,而 ReentrantLock 提供了可中断获取锁的方式。
公平性:synchronized 不保证锁的公平性,而 ReentrantLock 可以通过构造函数来指定锁是否公平。
等待通知机制:synchronized 在等待唤醒时,是由 JVM 来实现的,而 ReentrantLock 则是通过 Condition 来实现等待和唤醒的。
总之,synchronized 是 Java 中的一种内置锁,适用于简单的多线程同步控制;而 ReentrantLock 则是更为灵活和高级的多线程同步机制,适用于复杂的同步控制场景。
锁的获取和释放机制:synchronized 的获取和释放锁的机制是隐式的,由 JVM 来控制;而 ReentrantLock 则是通过代码显式地获取和释放锁。
性能:synchronized 是 JVM 实现的一种内置锁,由 JVM 负责控制锁的加锁和解锁,相对来说性能较高;而 ReentrantLock 则是基于 AQS 的,相对来说开销更大。
可中断性:在获取锁时,如果线程不能立即获取到锁,synchronized 的方式只能一直等待锁的释放,而 ReentrantLock 提供了可中断获取锁的方式。
公平性:synchronized 不保证锁的公平性,而 ReentrantLock 可以通过构造函数来指定锁是否公平。
等待通知机制:synchronized 在等待唤醒时,是由 JVM 来实现的,而 ReentrantLock 则是通过 Condition 来实现等待和唤醒的。
总之,synchronized 是 Java 中的一种内置锁,适用于简单的多线程同步控制;而 ReentrantLock 则是更为灵活和高级的多线程同步机制,适用于复杂的同步控制场景。
全部评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享

点赞 评论 收藏
分享