自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AQS acquire(int arg) 深度解析

首先尝试tryacquire方法,tryacquire方法在AQS中没用具体实现(在子类), 选择ReentrantLock 的NofairSync 实现 首先获取当前线程.同时拿到state状态c,如果c=0,说明无线程持有,使用cas抢占,同时将当前独占线程标记exclusiveOwnerThread(继承自AbstractOwnableSynchronizer)设置为当前线程,并返回true.c!=0时,进行下一步判断,如果exclusiveOwnerThread!=当前线程...

2021-08-23 09:46:35 450 1

原创 类加载器、双亲委派机制与线程上下文类加载器

首先介绍java类加载器: 1. boostrap classloader:根类加载器,用来加载JAVA_HOME/lib文件夹下的java核心类,由C++实现,不是ClassLoader的子类。不继承自java.lang.ClassLoader。由于boostrap类加载器涉及到虚拟机本地实现细节,因此开发者无法直接获取boostrap 类加载器的引用。(获取返回null)通过-Xbootclasspath可以设置bootclasspath的加载路径 2. extension ClassLoader:

2021-07-01 20:38:24 102

原创 为什么使用自定义的类做hashmap的键需要重写hashcode方法和equals方法?

不重写hashcode方法带来的问题: 首先,不重写hashcode方法的话,调用的是object类的hashcode方法,该方法生成hashcode的策略是:通过XOR-shift算法生成一个伪随机数。 对于不同的对象,即使对象的属性完全相同,也会有不同的hashcode。 这里会导致一个问题。存放一个键值对后,不能通过创建相同的实例对象作为键取到值(相同指的是同类型,属性完全相同) HashMap中定义一个自定义类self_obj,创建两个self_obj对象k1、k2。k1.id,k2.id 都是 1

2021-06-15 20:36:11 432 5

原创 源码解读:对象的hashcode是如何生成的

源码解读:对象的hashcode是如何生成的 首先object类的hashcode方法为native方法。 具体实现需要跟进到Hotspot的源码中: JVM_IHashCode方法,而JVM_IHashCode->FastHashCode->get_next_hash该实现位于hotspot/src/share/vm/runtime/synchronizer.cpp文件下 static inline intptr_t get_next_hash(Thread * Self, oop ob

2021-06-15 19:48:48 965

空空如也

空空如也

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

TA关注的人

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