• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > 详谈Lock与synchronized 的区别

详谈Lock与synchronized 的区别

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了lock和synchronized,鬼怪详谈祥云寺,详谈,鬼话详谈祥云寺,凯迪拉克ct6功能详谈等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

1、lock是可中断锁,而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层面上实现的,lock是通过代码实现的,JVM会自动释放锁定(代码执行完成或者出现异常),但是使用Lock则不行,要保证锁定一定会被释放,就必须将unLock()放到finally{}中。

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

以上这篇详谈Lock与synchronized 的区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详谈Lock与synchronized 的区别
  • 详谈Lock与synchronized 的区别

相关文章

  • 2017-05-28如何设计一个秒杀系统
  • 2017-05-28Java 并发编程之线程挂起、恢复与终止
  • 2017-05-28Java线程监听,意外退出线程后自动重启的实现方法
  • 2017-05-28Java 数组分析及简单实例
  • 2017-05-28浅析Java中如何实现线程之间通信
  • 2017-05-28spring boot 的常用注解使用小结
  • 2017-05-28MyBatis拦截器:给参数对象属性赋值的实例
  • 2017-05-28详解spring整合shiro权限管理与数据库设计
  • 2017-05-28JAVA 多线程爬虫实例详解
  • 2017-08-30java面试笔试需准备内容

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Java中的FileInputStream 和 FileOutputStream 介绍_动力节点Java学院整理
    • Java定时器问题实例解析
    • JavaEE开发基于Eclipse的环境搭建以及Maven Web App的创建
    • java处理按钮点击事件的方法
    • Java中自定义异常详解及实例代码
    • 在mybatis执行SQL语句之前进行拦击处理实例
    • JavaWeb使用POI操作Excel文件实例
    • JavaWeb中web.xml初始化加载顺序详解
    • java中Callback简单使用总结
    • Java程序员新手老手常用的八大开发工具

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有