码迷,mamicode.com
首页 > 编程语言 > 详细

001Java锁之synchronized

时间:2017-07-25 10:22:08      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:硬件   否则   阻塞   状态   时间   thread   read   java   Owner   

01、synchronized & Lock

  synchronized锁同步软件层面依赖JVM

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

02、synchronized作用域

  方法:锁住对象实例this

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

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

03、获取 & 释放锁流程

技术分享

  Read 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)时间,但释放偏向锁会增加耗时。总体来说节约了时间。

001Java锁之synchronized

标签:硬件   否则   阻塞   状态   时间   thread   read   java   Owner   

原文地址:http://www.cnblogs.com/geniushuangxiao/p/7232083.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!