多线程之lock和synchronized的区别
来源:互联网 发布:sql查询学生成绩 编辑:程序博客网 时间:2024/05/21 07:12
线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定
区别:
1、 synchronized ,如果A不释放,B将一直等下去,不能被中断
ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情
2、synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁定,但是使用Lock则不行,lock是通过代码实现的,要保证锁定一定会被释放,就必须将unLock()放到finally{}中
3、在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,但是在资源竞争很激烈的情况下,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态;
结论:
synchronized:
在资源竞争不是很激烈的情况下,偶尔会有同步的情形下,synchronized是很合适的。原因在于,编译程序通常会尽可能的进行优化synchronize,另外可读性非常好,不管用没用过5.0多线程包的程序员都能理解。
ReentrantLock:
ReentrantLock提供了多样化的同步,比如有时间限制的同步,可以被Interrupt的同步(synchronized的同步是不能Interrupt的)等。在资源竞争不激烈的情形下,性能稍微比synchronized差点点。但是当同步非常激烈的时候,synchronized的性能一下子能下降好几十倍。而ReentrantLock确还能维持常态。
所以,我们写同步的时候,优先考虑synchronized,如果有特殊需要,再进一步优化。ReentrantLock如果用的不好,不仅不能提高性能,还可能带来灾难。
以上内容摘自:http://www.cnblogs.com/nsw2018/p/5821738.html
- 多线程之lock和synchronized的区别
- 【多线程】多线程同步之synchronized和Lock
- Java多线程中 synchronized和Lock的区别
- java多线程中 synchronized和Lock的区别
- Java多线程中Synchronized和Lock的区别
- Java多线程中 synchronized和Lock的区别
- java多线程中 synchronized 和 Lock的区别
- synchronized和lock的区别
- synchronized和Lock的区别
- synchronized和lock的区别
- synchronized和lock的区别
- Lock和synchronized的区别
- synchronized和Lock的区别
- synchronized和Lock的区别
- synchronized和Lock的区别
- Lock和synchronized的区别
- synchronized和lock的区别
- synchronized和lock的区别
- Oracle 使用druid连接池,发生“违反协议”异常
- Mapreduce实例---倒排索引(含job串联)
- java调用tcp socket接口
- 实训三+四
- 在线编辑 思考题
- 多线程之lock和synchronized的区别
- 关于正则表达式自己的
- freemarker.template.TemplateException: Expected string. column.nullable evaluated instead to freemar
- 管道命令(pipe)
- QPixmap显示图片
- RecyclerView分割线
- mysql计算字符串在长字符串中出现次数
- webView打开本地文件和使用第三方网页,以及使用自己的webViewClient
- java验证码