美文网首页
Sychronized的原理

Sychronized的原理

作者: 李昂的数字之旅 | 来源:发表于2018-08-10 17:41 被阅读0次

synchronized是jdk原生提供的锁,底层由偏向锁、轻量级和重量级锁来回切换实现。偏向锁并不算锁,它在对象头中直接记录偏向线程ID,认为不会发生锁竞争。轻量级是通过CAS来获取锁,重量级锁则需要通过阻塞等待来获取锁。
当线程执行到synchronized代码块时,会判断加锁对象头Mark Word上锁状态标识(lock status),以此来判断对象当前被加锁的级别。
锁状态标识(lock status)和是否偏向共同表示5个状态

lock status 是否偏向标识(isBiased)
无锁 01 0
偏向锁 01 1
轻量锁 00
重量锁 10
GC标识 11

锁膨胀流程

image.png

锁优化

减少锁占用时间、减小锁粒度、锁分离、锁粗化、锁擦除
减少锁占用时间:减小加锁代码
减小锁粒度:将大对象改为小对象进行加锁,减少锁竞争。例如ConcurrentHashMap
锁分离:例如读写锁,读读不加锁,读写、写写才加锁
锁粗化:将多个锁合并成一个锁,减少锁获取与释放的开销,需要考虑成本
锁擦除:由JVM决定,例如StringBuffer虽然都带锁,但是在局部使用不产生并发,会将锁擦除

相关文章

  • sychronized原理

    偏向锁适合在只有一个线程执行同步代码时,提升性能线程进入同步代码块是,会通过CAS(compare and swa...

  • Sychronized的原理

    synchronized是jdk原生提供的锁,底层由偏向锁、轻量级和重量级锁来回切换实现。偏向锁并不算锁,它在对象...

  • Sychronized底层实现原理

    1.创建对象在堆内存中,分为三个部分: 对象头: 标记:存储对象的hashcode、锁信息、分代年龄和GC标志等信...

  • sychronized-基本原理介绍以及锁升级过程详解

    sychronized的实现原理与应用 在多线程并发编程中synchronized一直是元老的角色,很多人都会称呼...

  • Java Concurrent synchronized 使用&

    sychronized 用法 sychronized 是Java语法层面的同步策略,可以用来修饰instance变...

  • ReentrantLock原理剖析

    引言 提起java的线程同步,大家总能想到sychronized关键字。sychronized是由JVM提供的重量...

  • Sychronized & Volatile

    Synchronized 保证了可见性 ,并且保证了原子性Volatile只保证了可见性,不能保证原子性,即只能保...

  • Sychronized in Java

    使用多线程,避免不了要考虑线程安全的问题,常见解决线程安全的方式:是采用“序列化访问临界资源”的方案。即在同一时刻...

  • 多线程安全-sychronized

    layout: posttitle: "多线程安全-sychronized"categories: [编程]tag...

  • Sychronized关键字使用及原理解析

    Sychronized关键字使用场景 三种方法 修饰实例方法作用于当前对象实例加锁,进入同步代码前要获得当前对象实...

网友评论

      本文标题:Sychronized的原理

      本文链接:https://www.haomeiwen.com/subject/heslbftx.html