自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 ReentrantReadWriteLock、StampedLock说明

1 代码中声明了一个volatile类型的cacheValid变量,保证其可见性。2 首先获取读锁,如果cache不可用,则释放读锁。获取写锁,在更改数据之前,再检查一次cacheValid的值,然后修改数据,将cacheValid置为true,然后在释放写锁前立刻抢夺获取读锁;此时,cache中数据可用,处理cache中数据,最后释放读锁。这个过程就是一个完整的锁降级的过程,目的是保证数据可见性。总结:一句话,同一个线程自己持有写锁时再去拿读锁,其本质相当于重入。

2022-10-30 20:24:25 441

原创 AbstractQueuedSynchronizer之AQS

和AQS有关的类ReentrantLock、CountDownLatch、ReentrantReadWriteLock、Semaphore等,里面关联有AQS的实现类。进一步理解锁和同步器的关系锁,面向锁的使用者:定义了程序员和锁交互的使用层API,隐藏了实现细节。同步器,面向锁的实现者:Java并发大神DougLee,提出统一规范并简化了锁的实现,将其抽象出来,屏蔽了同步状态管理、同步队列的管理和维护、阻塞线程排队和通知、唤醒机制等,是一切锁和同步组件实现的--------公共基础部分。

2022-10-30 14:56:52 210 1

原创 Synchronized与锁升级

锁升级以后,hashcode去哪了?锁升级为轻量级或重量级锁后,Mark Word中保存的分别是线程栈帧里的锁记录指针和重量级锁指针,已经没有位置再保存哈希码,GC年龄了,那么这些信息被移动到哪里去了呢?用书中的一段话来描述 锁和hashcode 之前的关系:在Java语言里面一个对象如果计算过哈希码,就应该一直保持该值不变(强烈推荐但不强制,因为用户可以重载hashCodc0方法按自己的意愿返回哈希码),否则很多依赖对象哈希码的API都可能存在出错风险。

2022-10-23 23:43:51 3183 4

原创 Java对象内存布局和对象头

在HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)

2022-10-22 17:17:08 350

原创 ThreadLocal原理和使用

ThreadLocal中ThreadLocalMap的数据结构和关系?ThreadLocal的key是弱引用,这是为什么?ThreadLocal内存泄露问题你知道吗?ThreadLocal中最后为什么要加remove方法?变量和类型方法描述Tget()返回当前线程的此线程局部变量副本中的值。返回此线程局部变量的当前线程的”初始值”。voidremove()删除此线程局部变量的当前线程值。void将此线程局部变量的当前线程副本设置为指定值。创建一个线程局部变量。

2022-10-19 23:05:20 3879

原创 原子操作类

LongAdder的基本思路就是分散热点,将value值分散到一个Cell数组中,不同线程会命中到数组的不同槽中,各个线程只对自己槽中的那个值进行CAS操作,这样热点就被分散了,冲突的概率就小很多。如果要获取真正的long值,只要将各个槽中的变量值累加返回。sum()会将所有Cell数组中的value和base累加作为返回值,核心的思想就是将AtomicLong一个value的更新压力分散到多个value中去,从而降级更新热点。内部有一个base变量,一个Cell数组。

2022-10-13 23:11:38 283

原创 CAS理解

compare-and-swap的缩写,中文翻译成比较并交换,实现并发算法时常用到的一种技术。它包含三个操作数一一内存位置、预期原值及更新值。执行CAS操作的时候,将内存位置的值与预期原值比较:如果相匹配,那么处理器会自动将该位置值更新为新值,如果不匹配,处理器不做任何操作,多个线程同时执行CAS操作只有一个会成功。

2022-10-12 11:07:00 818

原创 内存屏障与指令重排

1.什么是内存屏障?2.内存屏障分类3.volatile中写屏障与读屏障的过程4.volatile禁止指令重排的行为5.重排的分类与执行流程

2022-10-09 22:47:58 601

原创 JMM中的happens-before原则

1.先行发生原则说明2.happens-before总原则3.happens-before之8条4.happens-before小总结

2022-10-09 22:00:37 240

原创 volatile总结

1.volatile可见性2.volatile禁止指令重排3.凭什么我们Java写了一个volatile关键字系统底层加入内存屏障?如何实现的?4.内存屏障是什么?5.内存屏障能干什么?6.内存屏障四大指令7.三句话总结

2022-10-09 20:50:00 119

原创 LockSupprt类使用

1.LockSupprt是什么?2.LockSupport类的主要方法3.三种让线程等待和唤醒的方法4.重点说明5.面试题6.官方说明

2022-10-08 10:04:56 107

原创 Java线程中断

1.什么是中断机制?2.中断的相关API方法之三大方法说明3.如何停止中断运行中的线程?4.当前线程中的中断标识为true,是不是线程就立即停止?5.关于静态方法Thread.interrupted()方法,谈谈你的理解

2022-10-06 21:46:53 3269

原创 Java中锁的了解

Java中锁的简单了解

2022-10-06 14:36:12 181

原创 volatile的深度理解

volatile是一种轻量级的同步机制。在原子性方面它仅能保障写 volatile 变量操作的原子性,但没有锁的排他性;volatile 关键字的使用不会引起上下文切换(所以被称为“轻量级” )。

2022-10-02 16:39:30 167

原创 @Autowired注解如何实现自动注入:

结论:@Autowired注解按照类型去IOC容器中查找bean对象,如果容器(即为IOC容器)中没有该类型对象(例如,该类型是个接口),则去容器中查找该类型的子类(实现类)的对象,进行注入。

2022-08-30 11:17:53 1370 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除