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

synchronized和Lock的区别

时间:2023-04-26 15:46:25浏览次数:40  
标签:synchronized 区别 队列 Lock 线程 公平 唤醒

  1. synchronized是java的关键字,而Lock是java中的一个接口。synchronized是由jdk实现的,不需要程序员控制释放锁和加锁,而lock需要手动去控制加锁释放锁。
  2. synchronized修饰的代码异常时,自动释放锁资源,而Lock需要调用unLock()方法手动释放锁,否则会造成死锁现象。需要在finally快中使用该方法释放锁资源。
  3. Lock可以让等待锁资源的线程中断,如tryLock(long time, TimeUnit unit)。而synchronized不行,需要一直等待,直到获得锁
  4. synchronized是非公平锁,Lock默认是非公平,但是可以设置为公平锁。
  5. Lock可以绑定条件,实现分组唤醒需要的线程;synchronized要么随机唤醒一个,要么唤醒全部线程。

公平锁和非公平锁

公平锁

多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁。
优点:所有的线程都能得到资源,不会饿死在队列中。
缺点:吞吐量会下降很多,队列里面除了第一个线程,其他的线程都会阻塞,cpu唤醒阻塞线程的开销会很大。

非公平锁

多个线程去获取锁的时候,会直接去尝试获取,获取不到,再去进入等待队列,如果能获取到,就直接获取到锁。
优点:可以减少CPU唤醒线程的开销,整体的吞吐效率会高点,CPU也不必取唤醒所有线程,会减少唤起线程的数量。
缺点:你们可能也发现了,这样可能导致队列中间的线程一直获取不到锁或者长时间获取不到锁,导致饿死。

标签:synchronized,区别,队列,Lock,线程,公平,唤醒
From: https://www.cnblogs.com/yliunyue/p/17353354.html

相关文章

  • ajax中responseText与responseXML区别
    源:http://lou888.blog.hexun.com/46543491_d.html评:一、ajax中responseText与responseXML区别1、"responseText”属性以字符串形式返回HTTP响应;“responseXML”属性以XML形式返回HTTP响应。functiongetTel(){vartelText=document.getElement......
  • 机器学习和深度学习的区别
    机器学习和深度学习都属于人工智能领域,但它们有不同的方法和应用场景。机器学习是一种利用统计学习算法让计算机模仿人类的学习过程来实现智能化的技术。机器学习的主要思想是从大量的数据中发掘规律和模式,然后将这些规律和模式应用到新的数据中进行预测和决策。聚类,聚合 深度......
  • Java中抽象类和接口的区别?
    什么是抽象类?抽象类是对具体概念的抽象抽象类本质是为了继承只能被public或默认修饰行为层面抽象出来抽象方法抽象类的注意事项抽象类不可以被直接实例化抽象类中可以存在构造方法抽象类可以存在普通方法抽象方法的注意抽象方法必须定义在抽象类中仅声明实现......
  • PDM与PLM的区别
    PDM与PLM是产品创新数字化领域中极为常见的两个名词,然而不论在销售环节、实施环节,很多人经常在概念上混淆和滥用,本文力图对这两个概念所关注的领域进行一定的差异说明。1、PDMPDM作为产品创新数字化的重要概念,是ProductionDataManagement的缩写,顾名思义,关注点在于产品数据的信......
  • VRAM和GPU的区别
    vram和gpu区别,vram这个很多人还不知道,1、VRAM就是广义上说的显存。2、这不是什么品牌,是显卡上的随机存取存储器。3、比如你显卡有4G显存,这个4G就是VRAM的大小。4、VRAM不是品牌,VRAM的意思就是显存。5、V代表VideoCard(显卡),RAM代表就是内存,VRAM意思是显卡的内存,也就是显存。......
  • 面试官:Java装箱与拆箱的区别?
    关注“Java后端技术全栈”回复“000”获取大量电子书认识装箱和拆箱装箱就是自动将基本数据类型转换为包装器类型(int-->Integer);调用方法:Integer的valueOf(int)方法。拆箱就是自动将包装器类型转换为基本数据类型(Integer-->int);调用方法:Integer的intValue方法。在JavaSE5之前,如果要......
  • apply_map_applymap的区别
    1.apply()使用: 2.map()方法的使用: 3.applymap每个元素同时操作: ......
  • React和Vue的区别
    React和Vue是两个非常流行的JavaScript框架,用于构建前端Web应用程序。以下是它们之间的一些区别:模板语法:Vue使用模板语法,它允许您在HTML模板中嵌入Vue代码,类似于AngularJS。React使用JSX语法,它允许您将JavaScript代码嵌入HTML模板中。数据绑定:Vue使用双向数据绑定,这意味着当......
  • Linux common clock framework(1)_概述
    1.前言commonclockframework是用来管理系统clock资源的子系统,根据职能,可分为三个部分:1)向其它driver提供操作clocks的通用API。2)实现clock控制的通用逻辑,这部分和硬件无关。3)将和硬件相关的clock控制逻辑封装成操作函数集,交由底层的platform开发者实现,由通用逻辑调用。因此......
  • 2.mysql binlog的三种格式及区别
    好文:https://www.cnblogs.com/syw20170419/p/16443105.html 1、三种格式:row、statement、mixed2、区别:row格式文件比较大,statement比较小,row格式保存的是一行一行的数据,statement保存的是sql语句,mixed格式介于二者之间,statement容易丢数据,row格式则不会3、statement容易丢......