JAVA多线程1——ReentrantLock与synchronized的区别和适用场景
来源:互联网 发布:淘宝分销赚钱吗 编辑:程序博客网 时间:2024/05/22 05:27
重入的概念
首先说明可重入锁的概念,即一个线程尝试去获取自己已经持有的锁,可以成功获取,而其他线程不可以获取。这样做的优点简而言之是——递归无阻塞的同步机制。若锁不是可重入的,在子类的同步方法中调用父类的同步方法,会无法第二次获取子对象的锁,导致死锁。接下来开始正题
ReentrantLock的优点
1、ReentarntLock可以添加多个检控条件(condition),但是synchronized只可以添加一个;
2、ReentarntLock可以控制得到锁的顺序(公平锁),也可以和synchronized一样使用非公平锁;
3、ReentarntLock支持获取锁超时(tryLock()方法)以及获取锁响应中断的操作(lockInterruptibly()方法,synchronized不支持。
4、在高争用条件下,ReentarntLock的可伸缩性优于synchronized。
ReentrantLock的缺点
1、必须在finally块中手动释放锁;
何时应该使用ReentrantLock?
“既然如此,我们什么时候才应该使用 ReentrantLock 呢?答案非常简单 —— 在确实需要一些 synchronized 所没有的特性的时候,比如时间锁等候、可中断锁等候、无块结构锁、多个条件变量或者锁投票。 ReentrantLock 还具有可伸缩性的好处,应当在高度争用的情况下使用它,但是请记住,大多数 synchronized 块几乎从来没有出现过争用,所以可以把高度争用放在一边。我建议用 synchronized 开发,直到确实证明 synchronized 不合适,而不要仅仅是假设如果使用 ReentrantLock “性能会更好”。请记住,这些是供高级用户使用的高级工具。(而且,真正的高级用户喜欢选择能够找到的最简单工具,直到他们认为简单的工具不适用为止。)一如既往,首先要把事情做好,然后再考虑是不是有必要做得更快。”
——该段引自IBM的一篇文章
- JAVA多线程1——ReentrantLock与synchronized的区别和适用场景
- Java并发——synchronized和ReentrantLock的联系与区别
- JAVA的ReentrantLock与synchronized 的区别
- JAVA 多线程 synchronized与ReentrantLock
- ReentrantLock与synchronized的区别
- ReentrantLock与synchronized的区别
- ReentrantLock与synchronized的区别
- synchronized 与 ReentrantLock 的区别
- Synchronized与ReentrantLock的区别
- ReentrantLock和Synchronized的区别
- ReentrantLock 和synchronized的区别
- synchronized和ReentrantLock的区别
- synchronized和ReentrantLock的区别
- synchronized和ReentrantLock的区别
- synchronized和ReentrantLock的区别
- Synchronized 和Reentrantlock 的区别
- Synchronized 和 reentrantLock的区别
- Synchronized和ReentrantLock的区别
- uva508 Morse Mismatches
- selvet10-简单自定义标签
- Matlab用数学形态学进行图像处理——雪花粒度测量
- nginx负载均衡的集中算法
- 7-1 是否同一棵二叉搜索树(25 分)
- JAVA多线程1——ReentrantLock与synchronized的区别和适用场景
- 关于 1.0/0.0 以及 0.0/0.0 的值
- 44. Wildcard Matching
- Hibernate学习---单表查询
- CSS基础(三)
- POI导出EXCEL经典实现
- EM算法之高斯混合模型(一)
- Linux SD/MMC/SDIO驱动分析(新)
- javascript 对象的深浅拷贝