当前位置: 首页 > news >正文

java中的lock和synchronized区别是什么

为什么80%的码农都做不了架构师?>>>   hot3.png

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

ReentrantLock获取锁定与三种方式:
a) lock(), 如果获取了锁立即返回,如果别的线程持有锁,当前线程则一直处于休眠状态,直到获取锁
b) tryLock(), 如果获取了锁立即返回true,如果别的线程正持有锁,立即返回false;
c)tryLock(long timeout,TimeUnit unit), 如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就返回true,如果等待超时,返回false;
d) lockInterruptibly:如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到获取锁定,或者当前线程被别的线程中断

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

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

转载于:https://my.oschina.net/axes/blog/125346

相关文章:

  • Windows Update问题
  • 为iOS 项目引入其它开发包 的方法
  • 对地理信息标准化的思考
  • ExtJs十四(ExtJs Mvc图片管理之四)
  • 谷歌用户Siri当心!谷歌正从苹果业务中分走一杯羹
  • 线程开发之多线程之间的通讯实现
  • nullnullHandling Features Not Supported on TV 在电视上处理不支持的功能
  • 我的vim高亮设置
  • 如何配置oracle数据库的连接
  • Java EE企业系统性能问题的原因和解决建议
  • 使用sqlplus创建表空间
  • 数据库并发操作
  • 列出目录下所有文件
  • Java 程序编译运行
  • Go语言并发之美
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • CSS 专业技巧
  • JAVA SE 6 GC调优笔记
  • Java比较器对数组,集合排序
  • Java超时控制的实现
  • Js基础知识(四) - js运行原理与机制
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • laravel 用artisan创建自己的模板
  • storm drpc实例
  • TypeScript迭代器
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 动态规划入门(以爬楼梯为例)
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 前端性能优化--懒加载和预加载
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 为视图添加丝滑的水波纹
  • 协程
  • 学习笔记TF060:图像语音结合,看图说话
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​secrets --- 生成管理密码的安全随机数​
  • ​TypeScript都不会用,也敢说会前端?
  • # Java NIO(一)FileChannel
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #include
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (20050108)又读《平凡的世界》
  • (27)4.8 习题课
  • (52)只出现一次的数字III
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (zt)最盛行的警世狂言(爆笑)
  • (八)Flask之app.route装饰器函数的参数
  • (第一天)包装对象、作用域、创建对象
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm码农论坛 毕业设计 231126
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • **PHP二维数组遍历时同时赋值
  • *2 echo、printf、mkdir命令的应用
  • .NET Core 中的路径问题