• synchronize、Lock、ReenTrantLock 的区别


    synchronize 和Lock:

    1、synchronize 系java 内置关键字;而Lock 是一个类  

    2、synchronize 可以作用于变量、方法、代码块;而Lock 是显式地指定开始和结束位置

    3、synchronize 不需要手动解锁,当线程抛出异常的时候,会自动释放锁;而Lock则需要手动释放,所以lock.unlock()需要放在finally 中去执行

    4、性能方面,如果竞争不激烈的时候,synchronize 和Lock 的性能差不多,如果竞争激烈的时候,Lock 的效率会比synchronize 高

    5、Lock 可以知道是否已经获得锁,synchronize 不能知道。Lock 扩展了一些其他功能如让等待的锁中断、知道是否获得锁等功能;Lock 可以提高效率。

    6、synchronize 是悲观锁的实现,而Lock 则是乐观锁的实现,采用的CAS 的尝试机制

    -------------------------------------------------------------------------------------------------

    synchronize 和 ReenTrantLock:

    除开上面和Lock 的区别,还有一下的一些区别:

    1、ReenTrantLock 可以中断锁的等待,提供了一些高级功能

    2、多个线程在等待的时候,可以提供公平的锁;默认的是非公平锁,性能会比公平锁好一些;

    3、ReenTrantLock 可以绑定多个锁条件

  • 相关阅读:
    mysql sql语句大全
    windows composer 安装,使用新手入门
    PHP 变量类型的强制转换 & 创建空对象
    window bat 运行 cmd 命令
    window apidoc的安装和使用
    linux apidoc的安装和使用
    RabbitMQ的安装与基本使用
    控制流之continue
    控制流之break
    控制流之while
  • 原文地址:https://www.cnblogs.com/drafire/p/10660758.html
Copyright © 2020-2023  润新知