参考文档

http://zzhonghe.iteye.com/blog/826162

http://houlinyan.iteye.com/blog/1112535

1,ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候
     线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,
     如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断
     如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情

2,synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,
   JVM会自动释放锁定,但是使用Lock则不行,lock是通过代码实现的,要保证锁定一定会被释放,就必须将unLock()放到finally{}中

3,在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,但是在资源竞争很激烈的情况下,
      Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态

所以,我们写同步的时候,优先考虑synchronized,如果有特殊需要,再进一步优化。ReentrantLock如果用的不好,不仅不能提高性能,还可能带来灾难。

因为写的不熟练的人,或不注意的时候,容易出现死锁

用例可以参考上两篇文章

临界区之synchronized

http://www.cnblogs.com/zyguo/p/4347021.html

临界区之lock

http://www.cnblogs.com/zyguo/p/4362880.html

最新文章

  1. php N 维数组的读取、设置、删除
  2. Sql Server系列:子查询
  3. linux vi基本操作
  4. Java for LeetCode 236 Lowest Common Ancestor of a Binary Tree
  5. Python学习路程day13
  6. SQL分布式查询、跨数据库查询
  7. Broadwell I7-5775c/5675c BSOD 蓝屏问题
  8. cordova android ios
  9. centos(linux) 下如何查看端口占用情况及杀死进程
  10. JsTree异步加载数据实现多级菜单
  11. python基础教程笔记—画幅好画(详解)
  12. VBA开发经验总结之二:灵活运用工作表属性
  13. 关于ActionScript在Java调用上的一些原理
  14. Spark 基本概念
  15. Struts(十二):异常处理:exception-mapping元素
  16. Windows下配置node和npm
  17. app:processOfficalDebugResources报错的几种解决方法;
  18. Android绘制优化(一)绘制性能分析
  19. springCloud学习之服务注册和发现
  20. webpack 4:默认配置

热门文章

  1. shell判断文件类型和权限
  2. c++ 备忘录模式(memento)
  3. SqlSugar Asp.Net 高性能ORM框架
  4. Git回滚到历史节点(SourceTree篇)
  5. [Training Video - 6] [File Reading] [Java] Read Excel File Using Apache POI API
  6. SourceTree 3.0.8 跳过登陆注册
  7. Excel数据透视表
  8. 通过input上传图片,判断不同浏览器及图片类型和大小的js代码
  9. Perl 学习笔记-输入输出
  10. jenkins持续集成之Global Tool Configuration的配置