首页 > 其他分享 >synchronized和ReentrantLock的区别

synchronized和ReentrantLock的区别

时间:2023-07-15 18:56:12浏览次数:40  
标签:手动 synchronized 区别 ReentrantLock 默认 升级 线程

用法:

synchronized修饰代码块或者方法,不需要手动释放,默认非公平

ReentrantLock需要手动调用,手动释放,能够控制公平机制,能够尝试获取和超时获取锁,能更好的控制锁行为,在需要通过线程提高性能的场景中,能比较好的操控

 

基本原理:

synchronized是靠管程(monitor)实现的,有锁升级,默认从轻量级锁开始升级,偏向锁需要添加启动参数(个人认为这玩意比较鸡肋),一旦升级后续线程都会使用重量级锁,不会降级

ReentrantLock是靠AQS框架实现的,每次都会CAS,然后才会升级

标签:手动,synchronized,区别,ReentrantLock,默认,升级,线程
From: https://www.cnblogs.com/benjerry/p/17556686.html

相关文章

  • ++b 和 a++ 的区别 看汇编代码
    汇编代码解释如下intx=a++;00F088338B45F8moveax,dwordptr[a]00F088368945E0movdwordptr[x],eax00F088398B4DF8movecx,dwordptr[a]00F0883C83C101a......
  • 【EF Core】主从实体关系与常见实体关系的区别
    上次老周扯了有关主、从实体的话题,本篇咱们再挖一下,主、从实体之间建立的关系,跟咱们常用的一对一、一对多这些关系之间有什么不同。先看看咱们从学习数据库开始就特熟悉的常用关系——多对多、一对一、一对多说起。数据实体之间会建立什么样的关系,并不是规则性的,而是要看数据的功......
  • Nacos和Consul的区别
    一、CAP理论在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(PartitionTolerance)三者中的两个,另外一个必须被牺牲。1、CP架构如下图,当node1发生异常时,node1的i的值为1,而因为node1发生了异常,导......
  • vue中$set和$forceUpdate强制更新视图层的区别
    $forceUpdate原理:调用notify() 强制视图更新  $set原理:defineReactive(this.data数据,要劫持得数组索引或对象键,默认值)   建立响应式依赖  指定数据更新使用场景:如果data数据的层级过深,导致无法响应式显示解决方法一:$set()this.$set(target,key,value)解......
  • C语言 #ifdef 和 #if defined区别
    注意两者都有个define的作用,区别在于使用方式上。前者的通常用法是:\#ifdefXXX....\#else....\#endif只能在两者中选择是否有定义。对于后者,常用法是:\#ifdefinedxxx1....\#elifdefinedxxx2....\#elifdefinedxxx3....\#endif......
  • 7.null和undefined的区别
    7.null和undefined的区别?首先Undefined和Null都是基本数据类型,这两个基本数据类型分别都只有一个值,就是undefined和null。undefined代表的含义是未定义,null代表的含义是空对象。一般变量声明了但还没有定义的时候会返回undefined,null主要用于赋值给一些可能会返......
  • 122.get和post请求在缓存方面的区别
    122.get和post请求在缓存方面的区别相关知识点:get请求类似于查找的过程,用户获取数据,可以不用每次都与数据库连接,所以可以使用缓存。post不同,post做的一般是修改和删除的工作,所以必须与数据库交互,所以不能使用缓存。因此get请求适合于请求缓存。回答:缓存一般只适用......
  • python中import和import...from的区别
    今天遇到一个奇怪的问题,如下面的代码:importtkinterastkfromtkinterimportsimpledialogdefpopup():user_input=tk.simpledialog.askstring("输入对话框","请输入你的名字:")ifuser_inputisnotNone:print("你的名字是:",user_input)......
  • python中None与Null的区别
    None是一个对象,而NULL是一个类型。Python中没有NULL,只有None,None有自己的特殊类型NoneType。None不等于0、任何空字符串、False等。在Python中,None、False、0、""(空字符串)、、()(空元组)、(空字典)都相当于False。  ......
  • 什么是STAR法则?什么是PDCA?这两个法则有什么区别和联系?
    STAR法则是一种用于回答面试问题或撰写工作经历的方法。它是指Situation(情境)、Task(任务)、Action(行动)和Result(结果)的缩写。按照STAR法则,回答问题或描述经历时,首先阐述面临的情境或任务,然后描述所采取的具体行动,并最后强调所取得的结果。PDCA是Plan-Do-Check-Act的缩写,也被称为循环......