锁
羯殇
这个作者很懒,什么都没留下…
展开
-
Java锁同步synchronized
synchronized同步的位置: 1、普通同步方法,锁是当前实例对象; 2、静态同步方法,锁是当前类的class对象; 3、同步方法块,锁是括号里面的对象。 synchronized存于Java对象头中 虚拟机的对象头主要包括两部分数据:Mark Word(标记字段)、Klass Pointer(类型指针)。 Mark Word:存储对象自身的运行时数据 例如:哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程 ID、偏向时间戳等等 当Java对象头的Mark Word发生锁原创 2022-02-13 19:19:41 · 358 阅读 · 0 评论 -
Java锁升级
锁状态:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态 线程锁: 通常线程锁都是为了保证多个线程抢占同一个资源时不发生问题的一种保障措施,以保证不会发生死锁。 锁升级: 无锁态:没有对资源进行加锁操作 偏向锁:如果同一个线程获取多次同一个锁,则升级为偏向锁,偏向锁会判断线程的id和资源对象的头线程id是否一致,如果一致则直接把锁交予该线程 轻量级锁:如果多个线程获取锁,则升级为轻量级锁cas,通过自旋获取锁,如果失败则直接进入到下一次循环再次获取无需等待 重量级锁:同步锁,当前只允许一个线程获取锁,进行资原创 2022-02-13 18:26:18 · 267 阅读 · 0 评论 -
Java锁类型
Java锁类型 悲观锁、乐观锁 悲观锁:每次进行操作时都默认数据会被更改,对数据进行上排他锁,除了当前操作,其他线程不可访问 乐观锁:一般通过其他数据是否有被更高来确定当前数据是否未被更改,比如版本号或者时间戳,通常依赖数据库进行判断处理 自旋锁;通过判断当前数据的内存位置的值和预期值进行比对,如果比对通过则修改当前数据的值。在多线程下,其他自旋锁并不会进入等待,而是直接失败进行下一次循环判断。但是如果长时间比对失败,可能会由于自旋锁尝试次数过多导致cpu负荷过大。ABA问题:当某一个数据有A到B,再由B到原创 2022-02-13 17:48:50 · 210 阅读 · 0 评论