锁的一些简单理解

锁的升级 四种状态

锁的升级
无锁:
偏向锁:涉及锁撤销,会一定程度消耗资源,JVM 启动会出现多线程竞争,默认启动时延4秒(但不偏向线程(匿名偏向));关闭偏向锁;(开启:-xxBaiseLockingStartupDelay=?秒 wait()---->重量级锁
轻量级锁:线程未获取锁,就做简单自旋,等待获取锁,由JVM管理自旋次数。
重量级锁:自己维护等待队列,存放想获取锁的进程,避免长时间自旋,且不消耗CPU资源,交给操作系统os来处理。

无锁 (new对象)-> 偏向锁(在门上贴个名字) -> 自旋锁(多线程抢进行CAS) -> 重量级锁 (人太多了,近队列)

synchronized实现过程

  1. java代码: synchronized
  2. monitorenter   moniterexit
  3. 执行过程中自动升级
  4. lock comxchg 指令(多核的时候用lock,lock锁总线CAS原子性)

缓冲行cache line 

内存块(64字节)

cpu乱序执行

volatile关键字

1、保证线程可见性

2、禁止指令重排序

3、JVM的内存屏障

        屏障两边的执行不可以重排!保障有序!

五成实现:

1、java源码                                       volatile  int i

2、ByteCode字节码                          ACC_VOLATILE                        

3、JVM虚拟机规范                           JVM内存屏障

4、Hotspot实现                                 汇编语言调用

5、CPU级别                                      MESI  原语支持   总线锁

强引用

软引用(内存不够用了,回收软引用)

弱引用(垃圾回收器看到就回收)

虚引用(管理堆外内存,零拷贝)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值