6,synchronized, lock 区别
参考文档
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
最新文章
- php N 维数组的读取、设置、删除
- Sql Server系列:子查询
- linux vi基本操作
- Java for LeetCode 236 Lowest Common Ancestor of a Binary Tree
- Python学习路程day13
- SQL分布式查询、跨数据库查询
- Broadwell I7-5775c/5675c BSOD 蓝屏问题
- cordova android ios
- centos(linux) 下如何查看端口占用情况及杀死进程
- JsTree异步加载数据实现多级菜单
- python基础教程笔记—画幅好画(详解)
- VBA开发经验总结之二:灵活运用工作表属性
- 关于ActionScript在Java调用上的一些原理
- Spark 基本概念
- Struts(十二):异常处理:exception-mapping元素
- Windows下配置node和npm
- app:processOfficalDebugResources报错的几种解决方法;
- Android绘制优化(一)绘制性能分析
- springCloud学习之服务注册和发现
- webpack 4:默认配置
热门文章
- shell判断文件类型和权限
- c++ 备忘录模式(memento)
- SqlSugar Asp.Net 高性能ORM框架
- Git回滚到历史节点(SourceTree篇)
- [Training Video - 6] [File Reading] [Java] Read Excel File Using Apache POI API
- SourceTree 3.0.8 跳过登陆注册
- Excel数据透视表
- 通过input上传图片,判断不同浏览器及图片类型和大小的js代码
- Perl 学习笔记-输入输出
- jenkins持续集成之Global Tool Configuration的配置