![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
核心源码分析
文章平均质量分 67
可持续化发展
勤学如春起之苗,不见其增,日有所长;辍学如磨刀之石,不见其损,日有所亏。
展开
-
spring源码环境编译问题
错误信息:(各种各样的)* Where:Settings file 'D:\idea_space\spring-test02\settings.gradle' line: 8* What went wrong:Could not compile settings file 'D:\idea_space\spring-test02\settings.gradle'.> startup failed: settings file 'D:\idea_space\spring-test0..原创 2021-09-02 10:57:18 · 1980 阅读 · 0 评论 -
Condition条件队列核心源码分析,AQS的独占模式的应用
注:图片作者为小刘老师。哔哩哔哩搜索:小刘讲源码。/**AQS的内部类Node 主要关注这几个属性*/static final class Node { static final int CONDITION = -2; volatile int waitStatus; volatile Thread thread; Node nextWaiter;}public class ReentrantLock implements Lock, java.io.S.原创 2021-09-01 09:05:03 · 282 阅读 · 0 评论 -
ReentrantLock核心源码分析,AQS独占模式,可重入锁
看前须知 由于笔记比较多,看的时候,建议把代码copy到VS code 或者IDEA 中查看(为了可以点击方法进行跳转,方便阅读)。主要看方法上面的注释。本篇文章的图片来源于小刘老师的源码培训班。哔哩哔哩搜素:小刘讲源码。本篇文章仅用于作者本人复习源码知识点。我的笔记public class ReentrantLock implements Lock, java.io.Serializable { //默认使用非公平锁 public ReentrantLock()...原创 2021-08-27 17:32:01 · 152 阅读 · 0 评论 -
Visual Studio Code闭关Java的代码语法检查。把Java代码的红色下划波浪线去掉。Visual Studio Code的大纲不显示Java代码的结构信息?
效果图:如上图所示,我在一个Java文件里面定义了多个public的类,也没有导入相关的jar包。但都没有出现红色的下划线、语法报错之类红色警告。目的:为了增强用Visual Studio Code阅读我的核心源码分析笔记时的阅读体验。为了在用Visual Studio Code记录我的源码分析笔记时,方便跳转到其他的方法。做法:(1)下插件,Extension Pack for Java(2)改这个地方。这个地方会加载运行Java程序的一些环境吧。下好插件...原创 2021-08-25 19:29:18 · 3093 阅读 · 0 评论 -
ThreadPoolExecutor核心源码分析
看前须知关于线程回收的情况:在线程池running状态下, 非核心线程,在指定的空闲时间内,如果获取不到任务,就会被回收,走退出逻辑。 核心线程,如果 allowCoreThreadTimeOut = true,在空闲时间keepAliveTime内,获取不到任务,也会被回收。 核心线程,如果allowCoreThreadTimeOut = false,即使空闲,也不会回收。 如果调用了shutdown()方法,会中断所有空闲线程,去回收它们。如果调用了shu.原创 2021-08-20 22:33:59 · 225 阅读 · 0 评论 -
FutureTask核心源码分析
看前须知public interface Executor { void execute(Runnable command);}public interface RunnableFuture<V> extends Runnable, Future<V> { /** * Sets this Future to the result of its computation * unless it has been cancelled.原创 2021-08-17 18:20:40 · 200 阅读 · 0 评论 -
ConcurrentHashMap核心源码分析(二)
ConcurrentHashMap的TreeBinstatic final class TreeBin<K,V> extends Node<K,V> { /**TreeBin逻辑上引用了双向链表和红黑树,但物理上这两个结构里面的节点对象是同一个对象 */ //指向红黑树 根节点 TreeNode<K,V> root; //指向双向链表的头节点 volatile TreeNode<原创 2021-08-12 15:42:30 · 189 阅读 · 0 评论 -
ConcurrentHashmap核心源码分析(一)
以下内容为本人学习小刘老师的源码课程后(哔哩哔哩搜索,小刘讲源码),自己整理的笔记。仅供自己学习之用。这里写目录标题一级目录二级目录常量Constants成员属性Fields静态代码块内部类NodeTreeNodeForwardingNode内部小方法源码分析static final int spread(int h)Node一级目录二级目录 concurrenthashmap的扩容,数据迁移的动作是从下往上走的(以数组来看)。这样的好处是为了避免和迭代操作发生冲突。比如说,我在迭代访问conc原创 2021-08-10 20:44:18 · 271 阅读 · 0 评论 -
HashMap核心源码分析
基本原理补充笔记:笔记1笔记2补充笔记(1)数组和链表对比,内存布局,查找性能,内存大小,扩容灵活度,插入/删除节点,(2)散列表整合两种数据结构的优势,既可以用索引,动态扩容方便。 为什么要引入红黑树?为了解决链化过长的问题,提高查找效率。hashmap的扩容原理为什么要扩容?长度为16的时候,由于存放的元素过多,get方法的效率就降低了。扩容后,以空间换时间,提高了查找的效率。如果插入的数据很多的话,散列表就退化成线性查询了。扩容后,桶位就更多了。源码分析重要原创 2021-07-30 13:56:37 · 110 阅读 · 0 评论 -
LongAdder核心源码分析
LongAdder是在高并发下实现高性能统计的一个类。以前使用AtomicLong来在高并发下统计一些数据。但AtomicLong在高并发的情景下性能会越来越差。因为它是通过CAS的方式去操作的,而且只有一个变量去记录累计值。同一轮只有一个线程能竞争成功,抢到锁,把数据修改成功。有很多线程都会CAS失败,然后去自旋了。所以就有了替代方案,LongAdder。大概的逻辑LongAdder的设计:当写base没有竞争时,线程就将数据写在base里面。当线程在写base发生竞争了,用CAS的方式修改b.原创 2021-08-07 18:12:29 · 208 阅读 · 0 评论