zoukankan      html  css  js  c++  java
  • Synchronized 与Lock的不同之处

    Synchronized 与Lock的不同之处

    1. 用法不一样。synchronized既可以加在方法上,也可以加载特定的代码块上,括号中表示需要锁的对象。而Lock需要显示地指定起始位置和终止位置。synchronzied是托管给jvm执行的,Lock锁定是通过代码实现的。

    2. 在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),此时Lock的性能要远远优于synchronized。所以说,在具体使用时要根据适当情况选择。

    3. 锁的机制不一样。synchronized获得锁和释放的方式都是在块结构中,而且是自动释放锁。而Lock则需要开发人员手动去释放,并且必须在finally块中释放,否则会引起死锁问题的发生。

    4. Lock是一个接口,不是Java语言内置的;synchronized是Java语言的关键字,因此是内置特性。

    5. 采用synchronized不需要用户去手动释放锁,当synchronized方法或者synchronized代码块执行完之后或者出现异常时,系统会自动让线程释放对锁的占用;而Lock在发生异常时,如果没有主动通unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁;

    6. Lock可以让等待锁的线程响应中断,而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够响应中断;通过Lock可以知道有没有成功获取锁,而synchronized却无法办到。Lock可以提高多个线程进行读操作的效率。

  • 相关阅读:
    Navicat将表转为模型
    RestTemplate Hashmap变为LinkedHashMap源码解读
    IDEA无法编译源码,IDEA查看源码出现/* compiled code */
    grep,egrep,正则表达式
    特殊权限
    更新系统硬件信息----光驱
    复制其他文件的权限做为自己的权限
    umask
    生成随机口令
    让新增用户默认拥有文件
  • 原文地址:https://www.cnblogs.com/simon-1024/p/11751500.html
Copyright © 2011-2022 走看看