并发十:内置锁、显式锁使用总结

1、与synchronized相比ReentrantLock拥有非阻塞的获取锁、响应中断、超时机制、支持公平性设置等特性,这些特性是在这两种锁进行选择时的依据,而不是性能,JDK6之后内置锁引入了基于CAS的偏向锁、轻量级锁,以及JVM中的锁消除、锁粗化等优化手段,synchronized的性能不再是诟病。

2、ReentrantLock也会出现死锁,出现死锁的原因大都在于锁未释放,所以unlock一定要放在 finally中。

3、不管哪一种锁都会带来一定的性能损耗,使用锁时要尽量减少持有锁的时间,即避免在临界区内进行耗时计算。

3.1:尽量减少锁的作用域范围,即临界区内的代码越短越好(lock...unlock之间)。

3.2:能使用共享锁时尽量避免使用独占锁,如ReadWriteLock就比ReentrantLock的吞吐量高。

3.3:必要时进行分拆锁和分离锁,如ConcurrentHashMap的实现中,内部的数组被分成16段,每段单独加锁,使得每把锁的请求时间缩短,能支持更高的吞吐量,最好的情况下可以支持16个线程同时写入。

码字不易,转载请保留原文连接https://www.jianshu.com/p/be9298b272e7

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在Java5.0之前,在协调对共享对象的访问时可以使用的机制只有synchronized和volatile。 Ja...
    好好学习Sun阅读 521评论 0 3
  • 编写优质的并发代码是一件难度极高的事情。Java语言从第一版本开始内置了对多线程的支持,这一点在当年是非常了不起的...
    jackfrued阅读 8,478评论 5 85
  • 1.Lock接口 1.1 简介、地位、作用 锁是一种工具,用于控制对共享资源的访问。 Lock和synchroni...
    香沙小熊阅读 480评论 0 0
  • Java并发总结 1.多线程的优点 资源利用率更好 程序在某些情况下更简单 程序响应更快 2.创建线程 1.实现R...
    不会上树的猴子阅读 1,040评论 0 5
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,607评论 0 11