偏向锁、 轻量级锁 、 重量级锁

转载 2018年04月16日 16:44:38

锁的4种状态

      无锁状态

      偏向锁

      轻量级锁

      重量级锁

    一个对象刚开始实例化的时候,没有任何线程来访问它,处于无锁状态。

当第一个线程来访问它,它会偏向这个线程,此时,对象持有偏向锁。

这个线程在修改对象头成为偏向锁时使用CAS操作,并将对象头中的ThreadID改成自己的ID,

之后再次访问这个对象时,只需要对比ID,不需要再使用CAS在进行操作。

因为偏向锁不会主动释放,当第二个线程访问时引起竞争

检查原来持有该对象锁的线程是否依然存活,

如果挂了,则可以将对象变为无锁状态

如果原来的线程依然存活,且仍然需要持有偏向锁,则偏向锁升级为轻量级锁

如果不存在使用了,则可以将对象回复成无锁状态。

 

    轻量级锁认为竞争存在,但是竞争的程度很轻,一般两个线程对于同一个锁的操作都会错开,或者说稍微等待一下(自旋),另一个线程就会释放锁。

但是当自旋超过一定的次数,

或者一个线程在持有锁,一个在自旋,又有第三个来访时,轻量级锁膨胀为重量级锁,

重量级锁使除了拥有锁的线程以外的线程都阻塞,防止CPU空转。

偏向锁,轻量级锁与重量级锁的区别与膨胀

一直被这三个锁的膨胀问题所困扰,不知道到底实在什么时候会有偏向锁升级到轻量级锁,什么时候由轻量级锁升级到重量级锁。找到好久,也没有找到简洁明了的答案。        综合多个方面的描述综合自己的理解,...
  • choukekai
  • choukekai
  • 2017-03-19 20:44:01
  • 5011

偏向锁,轻量级锁,重量级锁

偏向锁,轻量级锁,重量级锁标签(空格分隔): java 并发 锁偏向锁偏向锁,顾名思义,它会偏向于第一个访问锁的线程,如果在接下来的运行过程中,该锁没有被其他的线程访问,则持有偏向锁的线程将永远不需要...
  • caizs566205
  • caizs566205
  • 2016-07-06 20:31:03
  • 836

java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁

之前做过一个测试,详情见这篇文章《多线程 +1操作的几种实现方式,及效率对比》,当时对这个测试结果很疑惑,反复执行过多次,发现结果是一样的: 1. 单线程下synchronized效率最高(当时感...
  • zqz_zqz
  • zqz_zqz
  • 2017-04-19 22:31:08
  • 14424

Synchronized的原理及自旋锁,偏向锁,轻量级锁,重量级锁的区别

在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,Java ...
  • Kirito_j
  • Kirito_j
  • 2018-01-30 00:24:16
  • 396

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

《偏向锁,轻量级锁,重量级锁》优缺点对比(Lock的优缺点对比) 锁 优点 缺点 适用场景 偏向锁 加锁和解锁不需要额外的消耗,和执行非同步方法相比仅存在纳秒级...
  • CSDNones
  • CSDNones
  • 2016-01-15 15:32:30
  • 1274

浅谈Java里的三种锁:偏向锁、轻量级锁和重量级锁

在学习sychronized关键字及其实现细节的时候,发现java中的三种锁,偏向锁,轻量级锁,重量级锁其实也有很多值得探究的地方,引入偏向锁是为了在无多线程竞争的情况下尽量减少不必要的轻量级锁执行路...
  • u012722531
  • u012722531
  • 2017-10-15 22:10:37
  • 327

虚拟机内的锁优化(偏向锁,轻量级锁,自旋锁,重量级锁)

基础知识之一:锁的类型锁从宏观上分为:(1)乐观锁;(2)悲观锁。(1)乐观锁乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新...
  • hbtj_1216
  • hbtj_1216
  • 2017-08-14 16:15:28
  • 324

偏向锁,轻量级,重量级锁的理解

1:对象头 首先了解下32bit的Java对象头如下: 通过上面的表格,我们可以看出,synchronized用的锁是锁在Java对象头中的,Java的每个对象都可以作为锁,具体表...
  • yuanbing1988
  • yuanbing1988
  • 2017-06-21 11:34:41
  • 411

Java中的锁机制 synchronized & 偏向锁 & 轻量级锁 & 重量级锁 & 各自优缺点及场景 & AtomicReference

参考文章: http://blog.csdn.net/chen77716/article/details/6618779 目前在Java中存在两种锁机制:synchronized和Lock,Lock...
  • hhgggggg
  • hhgggggg
  • 2017-09-01 16:44:23
  • 556

偏向锁、轻量级锁、重量级锁、自旋锁原理讲解

一、简介 在讲解这些锁概念之前,我们要明确的是这些锁不等同于Java API中的ReentratLock这种锁,这些锁是概念上的,是JDK1.6中为了对synchronized同步关键字进行优化而产生...
  • L_BestCoder
  • L_BestCoder
  • 2018-02-09 13:34:46
  • 112
收藏助手
不良信息举报
您举报文章:偏向锁、 轻量级锁 、 重量级锁
举报原因:
原因补充:

(最多只允许输入30个字)