Synchronize的实现原理
Java对象在JVM中的结构如下: java对象包括: 对象都在32/64位机器中每个部分分别是32/64位,Class Pointer在64位机器默认开启指针压缩,只占用32位。 对象加锁使用的是Mark Word字段,如下是32位的Mark Word 通过 synchronize 关键字给对象加锁的过程如下: JVM引入偏向锁是为了在无多线程竞争的情况下尽量减少不必要的轻量级锁执行路径,因为轻量级锁的获取及释放依赖多次CAS原子指令,而偏向锁只需要在置换 ThreadID 的时候依赖一次CAS原子指令( 一旦出现多线程竞争的情况就必须撤销偏向锁 )。 偏向锁只有遇到其他线程尝试竞争偏向锁时,持有偏向锁的线程才会释放锁,线程不会主动去释放偏向锁 。偏向锁的撤销,需要等待全局安全点(在这个时间点上没有字节码正在执行),它会首先暂停拥有偏向锁的线程,判断锁对象是否处于被锁定状态,撤销偏向锁后恢复到未锁定(标志位为“01”)或轻量级锁(标志位为“00”)的状态。 轻量级锁所适应的场景是线程交替执行同步块的情况,如果存在同一时间访问同一锁的情况,就会导致轻量级锁膨胀为重量级锁。 synchronize的实现过程: 注意 :lock前缀指令的功能:Synchronize, volatile,CMS都是使用这个实现 当锁膨胀成重量级锁的时候,在JVM中当前锁对象关联的ObjectMonitor对象。 ObjectMonitor对象的数据结构如下: EntryList是一个后进先出的双向链表,AQS(ReentrantLock)是一个先进先出的双向链表。 ObjectMoniter的流程: 注意: Synchronize只有一个WaitSet,AQS可以创建多个Condition队列(功能和Waitset类似)。 synchronize的实现原理_技术流水-CSDN博客_synchronize
synchronized什么意思
synchronized意思是:同步的。双语例句:1、The timing of the gun was precisely synchronized with the turning of the plane's propeller. 风门的调速与飞机螺旋桨的转动精确同步。2、Application of GPS Synchronized Clock to Power System Transient Stability Control.GPS同步时钟用于电力系统暂态稳定控制的初步研究。3、The sound track did not synchronize with the action. 声迹与动作不同步。4、Let's synchronize our watches. 咱们对一下表吧。5、The film does not synchronize with sound. 该影片画面与声音不同步。
synchronized底层原理是什么?
在虚拟机执行到monitorenter指令的时候,会请求获取对象的monitor锁,基于monitor锁又衍生出一个锁计数器的概念。当执行monitorenter时,若对象未被锁定时,或者当前线程已经拥有了此对象的monitor锁,则锁计数器+1,该线程获取该对象锁。当执行monitorexit时,锁计数器-1,当计数器为0时,此对象锁就被释放了。那么其他阻塞的线程则可以请求获取该monitor锁。synchronized的特性:1、原子性所谓原子性就是指一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。2、可见性可见性是指多个线程访问一个资源时,该资源的状态、值信息等对于其他线程都是可见的。3、有序性有序性值程序执行的顺序按照代码先后执行。4、可重入性synchronized和ReentrantLock都是可重入锁。当一个线程试图操作一个由其他线程持有的对象锁的临界资源时,将会处于阻塞状态,但当一个线程再次请求自己持有对象锁的临界资源时,这种情况属于重入锁。