1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候

线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,

如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断

如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情

ReentrantLock获取锁定与三种方式:
    a)  lock(), 如果获取了锁立即返回,如果别的线程持有锁,当前线程则一直处于休眠状态,直到获取锁

b) tryLock(), 如果获取了锁立即返回true,如果别的线程正持有锁,立即返回false;

c)tryLock(long timeout,TimeUnit unit),   如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就返回true,如果等待超时,返回false;

d) lockInterruptibly:如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到或者锁定,或者当前线程被别的线程中断

2、synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异 常,JVM会自动释放锁定,但是使用Lock则不行,lock是通过代码实现的,要保证锁定一定会被释放,就必须将unLock()放到 finally{}中

3、在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,但是在资源竞争很激烈的情况下,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态;

转载于:https://www.cnblogs.com/elnino/p/5812674.html

Synchronized与ReentrantLock的区别相关推荐

  1. 【每日一题~001】谈谈synchronized与ReentrantLock的区别?

    每日一题,共同成长,见证奇迹,加油老铁 问题:谈谈synchronized与ReentrantLock的区别?思考:2分钟...答案如下:1.底层实现:1)synchronized 是JVM层面的锁, ...

  2. java 同步方式 lock_java的两种同步方式, Synchronized与ReentrantLock的区别

    java在编写多线程程序时,为了保证线程安全,需要对数据同步,经常用到两种同步方式就是Synchronized和重入锁ReentrantLock. 相似点: 这两种同步方式有很多相似之处,它们都是加锁 ...

  3. synchronized和ReentrantLock区别浅析 (转载地址:http://blog.csdn.net/zmx729618/article/details/51594166)

    一.什么是sychronized sychronized是java中最基本同步互斥的手段,可以修饰代码块,方法,类. 在修饰代码块的时候需要一个reference对象作为锁的对象. 在修饰方法的时候默 ...

  4. 【并发编程】线程锁--Synchronized、ReentrantLock(可重入锁)

    在说锁之前,我们要明白为什么要加锁,不加锁会怎样? 在并发编程中,很容易出现线程安全问题,接下来我们看个很经典的例子--银行取钱,来看一下有关线程安全的问题. 取钱的流程可以分为一下几个步骤: 1.用 ...

  5. synchronized和ReentrantLock的5个区别!

    作者 | 磊哥 来源 | Java面试真题解析(ID:aimianshi666) 转载请联系授权(微信ID:GG_Stone) 在 Java 中,常用的锁有两种:synchronized(内置锁)和 ...

  6. java多线程:9、synchronized、Lock的底层实现原理以及和volatile、Lock、ReentrantLock的区别?

    文章目录 0.1.线程中安全性问题的体现: 0.2.线程安全问题的解决办法 1.synchronized的底层实现原理分析 2.Lock的底层实现原理分析? 3.synchronized和volati ...

  7. Java基础学习总结(154)——Synchronized与Volatile、Synchronized与ReentrantLock概念及区别

    一.Synchronized与Volatile的区别 首先需要理解线程安全的两个方面:执行控制和内存可见.执行控制的目的是控制代码执行(顺序)及是否可以并发执行.内存可见控制的是线程执行结果在内存中对 ...

  8. synchronized与Lock的区别与使用

    原文链接 https://blog.csdn.net/u012403290/article/details/64910926 ###引言: 昨天在学习别人分享的面试经验时,看到Lock的使用.想起自己 ...

  9. 题目:三个售票员 卖出 30张票 || 多线程编程的企业级套路+模板||synchronized与Lock的区别

    package com.dym.juc;//资源类 class Ticket {private int number =30;public synchronized void saleTicket() ...

  10. Java多线程之Synchronized和Lock的区别

    Java多线程之Synchronized和Lock的区别 目录: 原始构成 使用方法 等待是否可以中断 加锁是否公平 锁绑定多个条件Condition 小结:Lock相比较Synchronized的优 ...

最新文章

  1. C# DataSet与DataTable的区别和用法
  2. selenium 页面经常改变元素_selenium 总结篇,常见方法和页面元素的操作
  3. 第三次学JAVA再学不好就吃翔(part108)--带缓冲的字符流
  4. XEIM_跨平台的网络通信产品
  5. 第三周学习《对象与类》心得
  6. linux系统可以装win10吗,如何在Win10专业版中安装Linux系统?
  7. java同步异步的区别
  8. 如何在ubuntu-1804中增加swapfile
  9. opencv python 常用方法
  10. java游戏精灵薇薇安_《王者降临》薇薇安一览
  11. 网络-DNS域名系统详解与DNS攻击
  12. 一门课程学习转录组调控分析和R可视化第十四期 (线上线下开课)
  13. 浅谈计算机领域及职业憧憬
  14. Google Earth Engine APP(GEE)——利物浦大学免费下载影像的软件Google Earth Engine Digitisation Tool (GEEDiT)
  15. 从零开始学习VIO笔记 --- 第一讲:基础知识(四元数,李代数)
  16. DOS批处理高级教程(一) 批处理基础
  17. 完成迭代效劳器端和客户端
  18. docker 批量垃圾清理
  19. 企业专线传输网络与普通宽带的对比
  20. 中职计算机英语听课记录,英语听课记录完整版).doc

热门文章

  1. Egret入门学习日记 --- 第十三篇(书中 5.2~5.3节 内容)
  2. JDK,JRE,JVM区别与联系(ZZ)
  3. 父子进程共享内存通信的三种方法
  4. 51nod 博弈论水题
  5. Spark-Mllib(二)基本统计
  6. c语言详解  蔡勒(Zeller)公式计算某一天是星期几  极其方便
  7. python - - 函数 - - 递归函数
  8. Windows Azure Storage (5) Windows Azure Drive
  9. 微软云计算介绍与实践(实践之二十七)
  10. linux+nginx+tomcat负载均衡,实现session同步