热门

最新

红包

立Flag

投票

同城

我的

发布
ambrosedream
Ambrosedream
5 年前
trueambrosedream

synchronized和ReentrantLock的区别
共同点:
1. 都是来处理多线程访问对象、变量的问题。
2. 都是课重入锁,同一线程可以多次获得同一个锁
3. 保证了可见性和互斥性

不同点
1. R是显式的获得、释放;syn是jvm负责,隐式获得释放。
2. R可以响应中断,可以轮回;syn不可以响应中断
3. R是API级别的,syn是JVM级别
4. R可以实现公平锁
5. R可以通过Condition绑定多个条件
6. 底层实现不一样,syn使用同步阻塞,悲观并发策略;lock是非同步阻塞,采用乐观并发策略。
7. syn发生异常会自动释放线程占用的锁,不会发生死锁;R需要在finally中释放锁,不然会导致死锁。
8. Lock可以让等待锁的线程响应中断,syn不行,syn使用时,等待线程会一直等待下去,不能响应中断。
9. Lock可以知道有没有成功获取锁,syn无法办到。
10. Lock可以提高多个线程进行读操作的效率,读写锁。

CSDN App 扫码分享
分享
评论
点赞
打赏
  • 复制链接
  • 举报
下一条:
JavaScript定义一个函数sort(desc)返回排序后的数组,desc的默认值设为false,desc为true,数组降序排列,desc为false,数组按升序排列。那个默认值设为false是怎么设置的?原默认值是undefined吗?
立即登录