什么是轻量级锁,偏向锁???

问题描述

网上的解释大同小异,不易理解。我只想知道羡慕两个问题:1.并发包中的ReentrantLock是偏向锁河轻量级锁码?2.偏向锁跟可重入性有什么区别,非偏向锁如何实现可重入?

解决方案

解决方案二:
哈哈,这个很复杂的说,要看源码,而且对并发要很熟悉。看情况啦,具我了解是这样的,1、ReentrantLock是偏向锁还是轻量级锁首先他是乐观锁,然后实现了偏向锁的功能。如果线程已经获得锁,那么ReentrantLock有偏向锁的功能。2、偏向锁跟可重入性有什么区别?都是锁的一种特性,或者功能加强。没什么大的关系,如果不可重入,那什么偏向锁就不可能存在了。CAS实现的称为乐观锁。有了轻量锁,在考虑偏向的功能。偏向锁是在没有多个线程竞争时的功能加强,字面理解就是偏向这个线程。二种锁使用的场景不同。还有一点,偏向锁的一个缺点,或者一种开销。如果又有一个线程争用锁,那要需释放偏向锁,这个过程会带来一些开销。总体来说有偏向锁比没有的好多。这方面并没有深入了解,主要是应用和偶尔写些东西,比如自己写个线程池玩玩。像偏向锁、非阻塞队列的现实,这些都不是一时半会能理解的。如果上面说的有错误,请见谅,最好自己参考下各种文献。
解决方案三:
1.并发包中的ReentrantLock是偏向锁河轻量级锁码?是的。2.偏向锁跟可重入性有什么区别,非偏向锁如何实现可重入?偏向锁和可重入性直接没啥关系。。当然要是锁不具备可重入性,那就无所谓偏向了。可重入性是指比如一个线程获得了对象A上的锁,如果它第二次请求A的锁必然可以获得(也就是说不会自己把自己锁住),可重入性是线程必须满足的,不然很多代码就会死锁了偏向锁是说如果线程请求一个自己已经获得的锁,它不会去再次执行lock和unlock,这样可以提升性能。如何实现可重入都是一样的,就是把锁的拥有者记下来,当申请锁的时候看一下锁是否已经被占有了,如果有人占着锁,看看是不是就是申请者自己。
解决方案四:
该回复于2014-09-22 08:47:24被版主删除
解决方案五:
引用1楼yxsmzzwa的回复:

哈哈,这个很复杂的说,要看源码,而且对并发要很熟悉。看情况啦,具我了解是这样的,1、ReentrantLock是偏向锁还是轻量级锁首先他是乐观锁,然后实现了偏向锁的功能。如果线程已经获得锁,那么ReentrantLock有偏向锁的功能。2、偏向锁跟可重入性有什么区别?都是锁的一种特性,或者功能加强。没什么大的关系,如果不可重入,那什么偏向锁就不可能存在了。CAS实现的称为乐观锁。有了轻量锁,在考虑偏向的功能。偏向锁是在没有多个线程竞争时的功能加强,字面理解就是偏向这个线程。二种锁使用的场景不同。还有一点,偏向锁的一个缺点,或者一种开销。如果又有一个线程争用锁,那要需释放偏向锁,这个过程会带来一些开销。总体来说有偏向锁比没有的好多。这方面并没有深入了解,主要是应用和偶尔写些东西,比如自己写个线程池玩玩。像偏向锁、非阻塞队列的现实,这些都不是一时半会能理解的。如果上面说的有错误,请见谅,最好自己参考下各种文献。

感觉ReentrantLock的偏向实现跟JDK6的默认实现不一样。JDK6就像你上面说的,如果另外一个线程竞争锁,则将偏向锁升级,有一种将偏向锁功能限制在无竞争场景的感觉。而ReentrantLock好像锁对于持有者来说不管在什么情况下,都是偏向的。
解决方案六:
楼主问题问的好,楼上回答说的好。1.是2.可重入是最基本的条件。偏向锁是对单线程的优化。

时间: 2024-09-17 03:46:03

什么是轻量级锁,偏向锁???的相关文章

Java线程并发中常见的锁--自旋锁 偏向锁

  随着互联网的蓬勃发展,越来越多的互联网企业面临着用户量膨胀而带来的并发安全问题.本文着重介绍了在java并发中常见的几种锁机制.     1.偏向锁 偏向锁是JDK1.6提出来的一种锁优化的机制.其核心的思想是,如果程序没有竞争,则取消之前已经取得锁的线程同步操作.也就是说,若某一锁被线程获取后,便进入偏向模式,当线程再次请求这个锁时,就无需再进行相关的同步操作了,从而节约了操作时间,如果在此之间有其他的线程进行了锁请求,则锁退出偏向模式.在JVM中使用-XX:+UseBiasedLocki

Java并发——Synchronized优化(轻量级锁、偏向锁)

1 重量级锁 在上一篇博客中我们知道,Synchronized的实现依赖于与某个对象向关联的monitor(监视器)实现,而monitor是基于底层操作系统的Mutex Lock实现的,而基于Mutex Lock实现的同步必须经历从用户态到核心态的转换,这个开销特别大,成本非常高.所以频繁的通过Synchronized实现同步会严重影响到程序效率,而这种依赖于Mutex Lock实现的锁机制也被称为"重量级锁",为了减少重量级锁带来的性能开销,JDK对Synchronized进行了种种

《偏向锁,轻量级锁,重量级锁》优缺点对比

<偏向锁,轻量级锁,重量级锁>优缺点对比(Lock的优缺点对比) 锁 优点 缺点 适用场景 偏向锁 加锁和解锁不需要额外的消耗,和执行非同步方法相比仅存在纳秒级的差距 如果线程间存在锁竞争,会带来额外的锁撤销的消耗 适用于只有一个线程访问同步块场景 轻量级锁 竞争的线程不会阻塞,提高了程序的响应速度 如果始终得不到索竞争的线程,使用自旋会消耗CPU 追求响应速度,同步块执行速度非常快 重量级锁 线程竞争不使用自旋,不会消耗CPU 线程阻塞,响应时间缓慢 追求吞吐量,同步块执行速度较长

多线程之:偏向锁,轻量级锁,重量级锁

一:java多线程互斥,和java多线程引入偏向锁和轻量级锁的原因? --->synchronized的重量级别的锁,就是在线程运行到该代码块的时候,让程序的运行级别从用户态切换到内核态,把所有的线程挂起,让cpu通过操作系统指令,去调度多线程之间,谁执行代码块,谁进入阻塞状态.这样会频繁出现程序运行状态的切换,线程的挂起和唤醒,这样就会大量消耗资源,程序运行的效率低下.为了提高效率,jvm的开发人员,引入了偏向锁,和轻量级锁,尽量让多线程访问公共资源的时候,不进行程序运行状态的切换,由用户态进

JVM中锁优化,偏向锁、自旋锁、锁消除、锁膨胀

本文将简单介绍HotSpot虚拟机中用到的锁优化技术. 自旋锁 互斥同步对性能最大的影响是阻塞的实现,挂起线程和恢复线程的操作都需要转入内核态中完成,这些操作给系统的并发性能带来了很大的压力.而在很多应用上,共享数据的锁定状态只会持续很短的一段时间.若实体机上有多个处理器,能让两个以上的线程同时并行执行,我们就可以让后面请求锁的那个线程原地自旋(不放弃CPU时间),看看持有锁的线程是否很快就会释放锁.为了让线程等待,我们只须让线程执行一个忙循环(自旋),这项技术就是自旋锁. 如果锁长时间被占用,

黄色忒们已被一把大锁紧紧锁住

昨日下午,雷星光电位于深圳市宝安区74区西乡大道9号一栋稍显破旧的办公楼五楼的办公室,黄色忒们已被一把大锁紧紧锁住,门口的标志也被撤去,门外走廊里积满灰尘. 而同在该楼办公的另一家公司工作人员告诉本报记者,雷星光电几天前已经倒闭,人员已经全部搬走了,设备也在几天前搬走了."五楼西侧以前都是雷星光电的厂房,听老板说好像是亏了,现在把工厂卖掉回家去了." "确实已经倒闭了,就是最近这几天的事情."曾经在雷星光电负责销售的陈俊(化名)亦向本报记者证实,雷星光电目前确已倒闭

详解 hibernate 悲观锁 乐观锁 深入分析 代码实例

首先,为什么要有锁这种概念和技术呢? 什么是锁( locking ) 业务逻辑的实现过程中,往往需要保证数据访问的排他性.如在金融系统的日终结算处理中,我们希望针对某个 cut-off 时间点的数据进行处理,而不希望在结算进行过程中(可能是几秒种,也可能是几个小时),数据再发生变化.此时,我们就需要通过一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓的 "锁" ,即给我们选定的目标数据上锁,使其无法被其他程序修改.Hibernate 支持两种锁机制:

vivo Xplay3S手机自动锁屏怎么设置?自动锁屏锁屏时间设置

1)我们在手机中打开vivo Xplay3S手机中的[设置],然后我们长按屏幕向上拉动,然后我们再点击找到[更多设置].(如下图)   2)进入到界面之后我们点击[自动锁屏],然后就可以设置具体时间了,在此我们找到合适时间再松手.(如下图)   好了这里最长为30分钟哦,如果你30分钟不动一下就会自动锁屏了哦.

浅析Sql server锁,独占锁,共享锁,更新锁,乐观锁,悲观锁_MsSql

锁有两种分类方法.(1) 从数据库系统的角度来看锁分为以下三种类型: •独占锁(Exclusive Lock)独占锁锁定的资源只允许进行锁定操作的程序使用,其它任何对它的操作均不会被接受.执行数据更新命令,即INSERT. UPDATE 或DELETE 命令时,SQL Server 会自动使用独占锁.但当对象上有其它锁存在时,无法对其加独占锁.独占锁一直到事务结束才能被释放. •共享锁(Shared Lock)共享锁锁定的资源可以被其它用户读取,但其它用户不能修改它.在SELECT 命令执行时,