synchronized相同,ReentrantLock也是一种互斥锁;

synchronized与ReentrantLock的对比:

  • 都是可重入锁

    可以再次获取自己的内部锁,即:一个线程获取某对象锁,在没有释放此对象锁的同时,可以再次获得此锁;

    一个锁每次被线程获取,锁计数器就增加1,知道锁计数器将为0,才能释放锁;

  • Synchronized依赖于JVM,ReenTrantLock依赖于API

    Synchronized的很多优化,都是在JVM层面优化的,并不暴露给用户;

    ReenTrantLock的各种功能实现,都可以用户自己通过调用API进行实现(lock,unLock);

  • ReenTrantLock增加了高级功能

    1. 等待可中断

      // 调用:
      lock.lockInterruptibly( );

      让等待锁的线程,放弃等待,去执行别的事情。

    1. 可实现公平锁

      Synchronized默认非公平;ReenTrantLock默认也是非公平锁;

      // 构造公平锁:
      Lock lock=new ReentrantLock(true)
    2. 锁可以绑定Condition,实现选择性通知

      synchronized关键字与wait()和notify/notifyAll()方法相结合可以实现等待/通知机制;

      ReentrantLock借助于与锁绑定的condition对象,来调用await()和signal/signalAll()方法来实现;

    3. ReentrantLock可以实现tryLock

      对于没有拿到锁的线程,可以令其做一些别的事情,不会阻塞;

  • Synchronized与ReentrantLock性能持平

    在JVM各种锁机制的优化下,Synchronized在很多地方都默认使用CAS的乐观锁,进行优化了;

    所以并不是ReentrantLock性能更强!!

最新文章

  1. CheetSheet
  2. 第二,C语言示例
  3. JCrop+GraphicsMagick+Im4Java 实现图像裁减
  4. 初识selenium-grid
  5. How to: Create Your Own Test Certificate (.pfx)
  6. Java实现Http服务器(二)
  7. HAProxy 代理负载均衡
  8. 用VMware vSphere Client客户端登陆vsphere5提示错误
  9. 在CDockablePane中嵌入CFormView
  10. Java中的常量治理
  11. 基于 HTML5 Canvas 的 3D 机房创建
  12. 流程控制之while循环
  13. 【Android Studio安装部署系列】十九、Android studio使用SVN
  14. Mybatis批量插入返回自增主键(转)
  15. IniHelper
  16. [AHOI2005] 航线规划
  17. SimpleUpdater.NET
  18. MongoDB 学习笔记(9)--- Limit与Skip方法
  19. javascript易混淆的split()、splice()、slice()方法详解
  20. C#.Net中操作XML方法一

热门文章

  1. [转] cmake源码编译安装jsoncpp
  2. 2-1 CLI 工程结构
  3. GSON工具类
  4. [LeetCode] 168. Excel Sheet Column Title 求Excel表列名称
  5. [LeetCode] 714. Best Time to Buy and Sell Stock with Transaction Fee 买卖股票的最佳时间有交易费
  6. 算法练习之二叉树的最大深度,二叉树的层次遍历 II
  7. Tomcat一些说明
  8. consul删除无效实例
  9. 最新 物易云通java校招面经 (含整理过的面试题大全)
  10. win运行canal