synchronized原理及1.6之后的锁升级优化

author author     2023-05-10     155

关键词:

参考技术A 偏向所锁,轻量级锁及重量级锁

偏向所锁,轻量级锁都是乐观锁,重量级锁是悲观锁。

一个对象刚开始实例化的时候,没有任何线程来访问它的时候。它是可偏向的,意味着,它现在认为只可能有一个线程来访问它,所以当第一个

线程来访问它的时候,它会偏向这个线程,此时,对象持有偏向锁。偏向第一个线程,这个线程在修改对象头成为偏向锁的时候使用CAS操作,并将

对象头中的ThreadID改成自己的ID,之后再次访问这个对象时,只需要对比ID,不需要再使用CAS在进行操作。

一旦有第二个线程访问这个对象,因为偏向锁不会主动释放,所以第二个线程可以看到对象时偏向状态,这时表明在这个对象上已经存在竞争了,检查原来持有该对象锁的线程是否依然存活,如果挂了,则可以将对象变为无锁状态,然后重新偏向新的线程,如果原来的线程依然存活,则马上执行那个线程的操作栈,检查该对象的使用情况,如果仍然需要持有偏向锁,则偏向锁升级为轻量级锁,( 偏向锁就是这个时候升级为轻量级锁的 )。如果不存在使用了,则可以将对象回复成无锁状态,然后重新偏向。

轻量级锁认为竞争存在,但是竞争的程度很轻,一般两个线程对于同一个锁的操作都会错开,或者说稍微等待一下(自旋),另一个线程就会释放锁。 但是当自旋超过一定的次数,或者一个线程在持有锁,一个在自旋,又有第三个来访时,轻量级锁膨胀为重量级锁,重量级锁使除了拥有锁的线程以外的线程都阻塞,防止CPU空转。

synchronized底层实现及优化机制(代码片段)

synchronized底层实现及优化机制前言首先介绍下synchronized锁,它属于互斥锁、悲观锁、同步锁、“重量级锁“”。它在1.6之前和1.6后加锁机制是不一样的。jdk1.6之前我简单说下流程,重点说下jdk1.6之后优化机制。jdk1.6之前... 查看详情

synchronized底层实现及优化机制(代码片段)

synchronized底层实现及优化机制前言首先介绍下synchronized锁,它属于互斥锁、悲观锁、同步锁、“重量级锁“”。它在1.6之前和1.6后加锁机制是不一样的。jdk1.6之前我简单说下流程,重点说下jdk1.6之后优化机制。jdk1.6之前... 查看详情

javasynchronized关键字的底层实现以及锁升级优化的原理一万字(代码片段)

介绍了synchronized关键字实现锁的底层原理以及JDK对于synchronized做出的锁升级优化!文章目录1syncronized基础知识1.1Synchronized锁的特性1.2synchronized锁表现形式1.3MarkWord1.4Monitor2synchronized块的底层原理3synchronized方法的底层原理4synchro... 查看详情

synchronized锁的膨胀过程(锁的升级过程)深入剖析(代码片段)

...状态指的是程序里的数据),在java程序中我们可以使用synchronized关键字来对程序进行加锁。当声明synchronized代码块的时候,编译成的字节码将包含monitorenter指令 和 monitorexit指令。这两种指令均会消耗操作数栈上的一个引... 查看详情

javasynchronized原理

Javasynchronized原理文章目录Javasynchronized原理对象在内存中的布局不同状态的锁轻量级锁为什么会有轻量级锁?轻量锁的加锁轻量锁的解锁偏向锁为什么会有偏向锁?偏向锁的加锁偏向锁的撤销重量级锁锁的不同状态关系流... 查看详情

java中锁升级的探究(代码片段)

...现原理锁升级过程锁升级原理锁升级概述JDK1.6之前,synchronized还是一个重量级锁,是一个效率比较低下的锁。但是在JDK1.6后,JVM为了提高锁的获取与释放效率对synchronized进行了优化,引入了 查看详情

reentrantlock原理,reentrantlock和synchronized区别

...再次获取该锁而不会被锁所阻塞。ReentrantLock虽然没能像synchronized关键字一样支持隐式的重进入,但是在调用lock()方法时,已经获取到锁的线程,能够再次调用lock( 查看详情

java多线程和并发,synchronized底层原理

...向锁5.轻量级锁6.偏向锁,轻量级锁,重量级锁联系八、synchronized底层原理1.对象头(MarkWord) 2.对象自带的锁(Monitor)(1)javap反编译查看原理同步代码块publicclassSyncBlockAndMethod{publicvoidsyncsTask( 查看详情

java回顾一下java中的synchronized(代码片段)

synchronized在JDK1.5之前是一个重量级锁,相当于JUC里面的lock锁,但是在1.6版本及之后对它做了很大的升级和优化,它不在那么的笨重了。synchronized的作用主要有三个:原子性:确保线程互斥的访问同步代码。可见性:保证共享变... 查看详情

第5章java中的锁

5.1Lock接口  并发编程安全性需要使用到锁,synchronized是一种隐式的获得与释放锁的关键字,除此之外还有Lock接口及其实现类,该接口及实现类提供了显示获取和释放锁的方式。  除了上述编程时的区别外,在使用时Lock与syn... 查看详情

synchronized的锁升级(偏向锁,自旋锁(cas),重量级锁)(代码片段)

synchronzied是一个重量级锁概念:什么叫重量级锁?就是申请资源必须经过kernel(内核也叫操作系统),调用。(里面涉及到了用户态(用户空间)和内核态(os)的交互)   --------------------------------------------------------------... 查看详情

synchronized的实现原理以及锁升级详解

文章目录​​写在前面​​​​synchronized的实现​​​​Java对象头​​​​锁的升级与对比​​​​无锁​​​​偏向锁​​​​偏向锁的撤销​​​​关闭偏向锁​​​​轻量级锁​​​​轻量级锁加锁​​​​轻量级锁解... 查看详情

并发编程——synchronized优化原理

...我的个人网站看看:耶瞳空间一:基本概念使用synchronized实现线程同步,即加锁,实现的是悲观锁。加锁可以使一段代码在同一时间只有一个线程可以访问,在增加安全性的同时,牺牲掉的是程序的执行性... 查看详情

synchronized关键字实现原理

目录一、synchronize关键字概述二、synchronized关键字实现原理三、为什么采用自旋而不是等待四、忙循环概述五、synchronize锁升级原理1、偏向锁为轻量级锁过程2、轻量级升级为重量级锁过程3、锁的升级的目的六、偏向锁概述七、... 查看详情

synchronized关键字实现原理

目录一、synchronize关键字概述二、synchronized关键字实现原理三、为什么采用自旋而不是等待四、忙循环概述五、synchronize锁升级原理1、偏向锁为轻量级锁过程2、轻量级升级为重量级锁过程3、锁的升级的目的六、偏向锁概述七、... 查看详情

synchronized的锁优化是怎么处理的?

...到了前所未有的提升。上一篇我们讲了通过锁扩展来提升synchronized性能,但这只是“众多”synchronized性能优化方案中的一个,所以这篇文章就来看看synchronized的核心优化方案。让我们回顾一下锁扩展对同步性能的影响。所... 查看详情

synchronized的实现原理及锁优化(代码片段)

... 记得刚刚开始学习Java的时候,一遇到多线程情况就是synchronized。对于当时的我们来说,synchronized是如此的神奇且强大。我们赋予它一个名字“同步”,也成为我们解决多线程情况的良药,百试不爽。但是,随着学习的深入,... 查看详情

优化技术专题「系统性能调优实战」终极关注应用系统性能调优及原理剖析(下册)

...题】「系统性能调优实战」终极关注应用系统性能调优及原理剖析(上册)之后我们接下来进行相关的。流程相关分析优化通过access_log.txt日志分析,在特定时间段内,将请求至系统的url分组计数,最后会出一个根据url调用次数... 查看详情