java并发编程学习笔记--锁

1 篇文章 0 订阅

synchronization  同步锁方法

sync原理:sync锁住的是对象、不是代码

java对象在JVM中分成:对象头、对象的实例数据、对齐字节,锁体现在对象头中

//可以用open  jdk jol包查看对象信息 ClassLayout.parseInstance(“对象名”).toPrintable();

打印的结果见下图,对象头占12byte(64位操作系统),对象头中包含mark word 和 klass pointer

同步状态存储在mark word中,详细存储方式见下图(hostspot源码)

mark word中包含对象的hash值、age、biased_lock(偏向锁)、lock(对象锁状态)

1、hash:只有计算过hashcode值的对象才有hashcode,前56个bit存储,但是56个bit中后31个是实际存储位置,前边25个是填充值,内存存储是采用小端存储。

2、age:对象的age(GC用)占4位,这也就说明GC在从新生代转为老年代是为什么to-from16次后做迁移,因为4位最多可以表示16个状态

3、biased_lock:占1位

4、lock:占2位

无锁状态:001

偏向锁:101

轻量锁:62位线程指针+00

重量锁:62位线程指针+01

GC状态:62位线程指针+11

1、没有锁关键字无锁

2、单线程加关键字采用偏向锁(JVM默认开启延迟4秒,用来兼顾jvm自身进程sync需求,如果关掉默认延迟,初始化对象默认为偏向锁,但偏向线程id为空)

3、多个进程交替执行采用轻量锁

4、多个进程同时执行,产生竞争,会升级为互斥锁(重量锁)

java1.6之前是调用linux mutex方法实现互斥,1.6之后锁不在利用操作系统实现锁,减少线程用户态到核心态的切换阻塞、提升性能

 

java锁有那些类型:公平锁、非公平锁、自选锁、偏向锁、轻量锁、重量锁

面试问:sync实现原理、怎么理解锁、分析是什么锁?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值