zoukankan      html  css  js  c++  java
  • 001Java锁之synchronized

    01、synchronized & Lock

      synchronized锁同步 软件层面依赖JVM

      Lock锁同步 硬件层面依赖cpu指令

    02、synchronized作用域

      方法:锁住对象实例this

      静态方法:锁住对象Class实例

      对象实例:锁住对应方法块

    03、获取 & 释放锁流程

      Ready Thread:处于此状态的线程只有1个

      Running Thread:unlock时,若Entry List为空,则从Contention List中移动线程到Entry List,并指定某线程为OnDeck状态。若此OnDeck状态线程获得锁,则进          入Owner状态;否则回到Entry List

    04、自旋锁

      处于Contention List、Entry List、Wait Set中的线程都处于阻塞状态,阻塞操作由操作系统完成。线程被阻塞后,便进入内核(Linux)调度状态,这会导致系统在用户态和内核态来回切换,严重影响锁性能。

      若Owner线程能很短时间内释放锁,则争用线程可自旋等待,Owner线程释放锁后,立即得到锁(对处于onDeck状态线程不公平),避免进入阻塞状态。

    05、偏向锁

      锁是可重入的。若线程已获得锁,下次再获取锁(监视对象),监视对象会偏向此线程,直接获得锁,无须再走加锁/解锁流程。节约CAS(Compare and Swap)时间,但释放偏向锁会增加耗时。总体来说节约了时间。

  • 相关阅读:
    Lua小技巧
    Lua中使用table实现的其它5种数据结构
    Lua 5.3 协程简单示例
    Lua 5.3 迭代器的简单示例
    Lua函数以及闭合函数的理解
    BabeLua常见问题
    Windows下的lua-5.3.4安装过程
    C++ 设计模式 开放封闭原则 简单示例
    UML基础系列:类图
    面向对象程序设计基本概念
  • 原文地址:https://www.cnblogs.com/geniushuangxiao/p/7232083.html
Copyright © 2011-2022 走看看