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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何删除sqlserver实例_sql server删除表

    如何删除sqlserver实例_sql server删除表在网上找到下面几种方法,本人使用的是第一种,很实用。1.删除SQLServer的特定实例若要删除SQLServer的某个特定实例,请按照以下步骤操作:找到并删除%drive%:\\ProgramFiles\\MicrosoftSQLServer\\MSSQL\\Binn文件夹,其中%drive%是要删除的SQLServer实例的位置。找到以下注册表项:HKEY…

    2022年10月2日
    2
  • linux 文本编辑器_Linux排名前7位的最佳文本编辑器

    linux 文本编辑器_Linux排名前7位的最佳文本编辑器linux文本编辑器TexteditorsplayamajorroleforLinuxusers.Whetheritissettingupuserinstructions,editingconfigurationfilesorwritingcodescriptstorunonyoursystem,everyonehasatexted…

    2022年5月23日
    66
  • 开始激活成功教程so文件_so文件格式怎么打开

    开始激活成功教程so文件_so文件格式怎么打开第一、利用IDA静态分析native函数1.isEquals函数分析函数指令代码:简单分析指令代码:1>、PUSH{r3-r7,lr}是保存r3,r4,r5,r6,r7,lr的值到内存的栈中;与之对应的是POP{r3-r7,pc}pc:程序寄存器,保留下一条CPU即将执行的指令lr:连接返回寄存器,保留函数返回后,下一条应执行的指令2>、调用strlen,malloc,st

    2022年9月19日
    1
  • smb服务检测(smb应用)

     开源包,http://jcifs.samba.org/.复制一篇文章.用JAVA访问共享文件系统前言在Microsoft网络系统中,SMB(ServerMessageBlock,服务信息块)协议是WindowsforWorkgroup(WfWg)、Windows95、WindowsNT和LanManager用来实现共享局域网上

    2022年4月13日
    71
  • jeesite快速开发平台(七)—-代码生成原理

    jeesite快速开发平台(七)—-代码生成原理

    2021年6月16日
    130
  • linux中find命令基本使用方法_find命令用法及参数

    linux中find命令基本使用方法_find命令用法及参数Linux系统find命令用法Linux查找命令find是Linux系统中最重要和最常用的命令之一,用于查找与指定参数条件匹配的文件及目录列表。find查找命令可以在各种条件下使用,我们可以通过权限,用户,组,文件类型,修改日期,大小等多种条件来查找文件。这里我会以实例的形式向大家说明find命令的具体用法。find命令的格式很简单,一般分成三个部分:1)find命令;2)搜索路径(目录可以写多个);3)表达式。对于find命令,最需要学习的是表达式这一段。表达式决定了我们要找的文件是什么属性的文件

    2022年8月31日
    5

发表回复

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

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