synchronized实现原理
2020-05-28 14:47:55   0  举报             
     
         
 synchronized实现原理
    作者其他创作
 大纲/内容
 1 是
  01
  再尝试
  CAS替换thread id
  拷贝对象头中的mark word到原持有偏向锁线程的锁记录中
  获得轻量级锁指向当前线程锁记录的指针|00
  mutex挂起当前线程
  自旋
  自旋达到一定次数cas依然没有成功
  未活动状态已退出同步代码块
  cas操作将对象头的mark word 中锁记录指针指向当前线程锁记录
  获得偏向锁thread id|epoch|1|01
  0 否
  唤醒原持有偏向锁的线程
  检查对象头的mark word中的记录的是否是当前线程id
  执行同步代码块
  失败
  开始新一轮锁竞争
  目前锁状态
  原持有偏向锁的线程的栈中分配锁记录
  是否偏向锁
  重量级锁10
  原持有偏向锁的线程释放锁空|0|01
  从安全点继续执行
  当前线程继续检查
  开始轻量级锁解锁
  线程t访问同步代码块
  当前线程
  检查原线程状态
  开始偏向锁撤销(等待竞争出现才释放锁的机制)
  释放锁
  成功
  暂停原持有偏向锁的线程
  是
  当前线程的栈中分配锁记录
  未退出同步代码块
  原线程获得轻量级锁指向原线程锁记录的指针|00
  转变为重量级锁指向重量级锁monitor的指针|10
  原持有偏向锁的线程到达安全点
  升级为重量级锁
  唤醒被挂起的线程
  不是
  轻量级锁00
  升级为轻量级锁
  拷贝对象头中的mark word到当前线程的锁记录中
  cas操作1.对象头中的mark word 中锁记录指针是否任然指向当前线程锁记录2.拷贝在当前线程锁记录的mark word信息是否与对象头中的mark word一致。
    
    收藏 
     
 
 
 
 
  0 条评论
 下一页
  
  
  
  
  
  
  
  
  
 