Synchronized和Lock的区别

Synchronized和Lock的区别  1、Lock是java的一个interface接口,而synchronized是Java中的关键字,synchronized是由JDK实现的,不需要程序员编写代码去控制加锁和释放;Lock的接口如下:“`public interface Lock {    void lock();    void lockInterruptibly() throws InterruptedExcep…

大家好,又见面了,我是你们的朋友全栈君。

  1、Lock是java的一个interface接口,而synchronized是Java中的关键字,synchronized是由JDK实现的,不需要程序员编写代码去控制加锁和释放;Lock的接口如下:
“`
public interface Lock {

    void lock();
    void lockInterruptibly() throws InterruptedException;
    boolean tryLock();
    boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
    void unlock();
    Condition newCondition();
}
“`
  2、synchronized修饰的代码在执行异常时,jdk会自动释放线程占有的锁,不需要程序员去控制释放锁,因此不会导致死锁现象发生;但是,当Lock发生异常时,如果程序没有通过unLock()去释放锁,则很可能造成死锁现象,因此Lock一般都是在finally块中释放锁;格式如下:
“`
Lock lock = new LockImpl; // new 一个Lock的实现类
lock.lock();  // 加锁
try{

    //todo
}catch(Exception ex){

     // todo
}finally{

    lock.unlock();   //释放锁
}
“`
  3、Lock可以让等待锁的线程响应中断处理,如tryLock(long time, TimeUnit unit),而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够中断,程序员无法控制;
  4、通过Lock可以知道有没有成功获取锁,tryLock()方法返回boolean值,因此可知道是否获得了锁,而synchronized却无法办到。
  5、Lock的实现类ReentrantReadWriteLock提供了readLock()和writeLock()用来获取读锁和写锁的两个方法,这样多个线程可以进行同时读操作。
  总体来讲,当并发量较小,资源竞争不激烈时,两者的性能是差不多的;当大量线程同时竞争,资源非常有限时,此时Lock的性能要远远优于synchronized。 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149531.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月24日 下午7:00
下一篇 2022年6月24日 下午7:00


相关推荐

  • Yii2 redis同步数据到mysql

    Yii2 redis同步数据到mysql

    2022年4月2日
    47
  • 中标麒麟安装jdk

    中标麒麟安装jdk中标麒麟自带 jdk7 如果需要更换 jdk 可以切换默认的 jdk 安装自己需要的 jdk 版本 jdk 6u45 linux x64 rpm b 环境变量配置 使用命令 vim etc profile 在该文件的末尾添加如下配置 exportJAVA HOME usr java jdk1 6 0 45exportJAVA HOME usr java jdk1 6 0 4

    2026年3月26日
    1
  • linux 放开8080端口命令_linux开放端口命令

    linux 放开8080端口命令_linux开放端口命令1.centos7版本对防火墙进行加强,不再使用原来的iptables,启用firewall1.查看已开放的端口(默认不开放任何端口)firewall-cmd–list-ports2.开启80端口firewall-cmd–zone=public(作用域)–add-port=80/tcp(端口和访问类型)–permanent(永久生效)firewall-cmd–zone=pub…

    2025年9月25日
    8
  • webstorm 格式化代码及常用快捷键 

    webstorm 格式化代码及常用快捷键 webstorm格式化代码快捷键centOS下Ctrl+Shift+lwindows下Ctrl+Alt+lmac下Option+Command+l查找/代替快捷键说明ctrl+shift+N通过文件名快速查找工程内的文件(必记)ctrl+shift+alt+N通过一个字符快速查找位置(必记)ctrl+F在文件内快速查找代码F3查找下一个shift+F3查找上一个ctrl+R文件内代码替换c…

    2022年6月11日
    185
  • C语言 文件读写的实现

    C语言 文件读写的实现关于C语言的文件读写,我将介绍下面这几种方式:字符的读写:使用fgetc()函数和fputc()函数;字符串的读写:使用fgets()函数和fputs()函数;格式化的读写(主要用于文本文件):使用fscanf()函数和fprintf()函数。字符读写:1.fputc()函数fputc(c,fp);//用于将一个字符写入文件其中,…

    2022年5月5日
    54
  • 影视3D建模和游戏3D建模差异,哪个更有前景?

    影视3D建模和游戏3D建模差异,哪个更有前景?影视3D建模和游戏3D建模,两者之间最大和最明显的差异是:游戏开发永远有多边形建模预算。影视建模方面,对于多边形数量都没有限制。对于电影来说,唯一限制是时间,按时,按预算生产合格的模型。游戏建模设计不能随意增加多边形面数,必须依靠纹理细节提升模型的质量。由于多边形数量必须很低,需要其他方法将更多细节放入模型中,目前最好的方法当然是使用纹理。游戏建模设计技术游戏中经常使用的技术是细节层次。意味单个游戏会有几个不同的细节级别。玩家离模型越远,资产的细节就越少。随着玩家越来越近,较低分辨率模型将被.

    2022年5月19日
    59

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号