
Java
文章平均质量分 66
KLordy
千里之行始于足下!
展开
-
ClassNotFoundException、NoSuchMethodException?
背景/吐槽:公司的云平台架构部门提供了一个spark链接hbase的工具包,但是其中包含的依赖太多太多,对外提供的jar包一个包居然接近90M,然后引用进来之后问题就很容易一不小心就和本地自己依赖的jar包产生冲突,真的是坑嗷,由此也告诫自己以后自己如果对外提供服务jar包,一定要尽量去除不用的jar包,该设置scope为provided的设置provided,能shade的尽量学习flink官方...原创 2019-11-22 20:48:19 · 393 阅读 · 0 评论 -
Java四种线程池原理&应用分析
线程池种类线程池的实现分为四类:Executors.newCachedThreadPool()Executors.newFixedThreadPool(int size)Executors.newScheduledThreadPool(int size)Executors.newSingleThreadExecutor()ThreadPoolExecutor构造参数四个线程池类都是...原创 2019-04-24 23:34:19 · 322 阅读 · 0 评论 -
ArrayList源码分析
本系列的所有源码主要是针对JDK 1.8的版本来探讨,部分容器源码在1.7和1.8又较大变动(例如HashMap)才会进行对比。 首先我们来看一下ArrayList的类图结构: 其中Cloneable、Serializable、RandomAccess分别是属于给该类添加某个属性的接口,而核心内容应该是List和AbstractList的类继承和接口实现。 接下来我们主要来围绕关...原创 2019-04-09 12:39:18 · 183 阅读 · 0 评论 -
ThreadLocal原理
参考:https://juejin.im/post/5a5efb1b518825732b19dca4 ThreadLocal用于提供线程级的全局变量,所谓线程级的全局变量意思就是这个变量只在当前线程内部是任意位置都可以获取到的,所以有部分同学就会用它来进行一些线程内的传参。 实际对于ThreadLocal而言,它的实现原理较为简单,就是每个线程在new Thread()创建的时候,内部都会...原创 2019-04-09 12:24:37 · 178 阅读 · 0 评论 -
Java内存模型和物理架构详解
1. 概述 我们常说的Java虚拟机具有很好的跨平台性,之所以强调所谓的跨平台性是因为不同的系统底层架构是会有区别的,而Java虚拟机的跨平台性就是它帮助我们把不同系统的底层区别给KO掉了,使得我们通过Java虚拟机编写的代码可以忽略不同平台底层的区别。而这其中关键的一点就是Java虚拟机的Java内存模型,内存模型其实就是JVM内部自己设计了一套规则,这套规则会规定不同线程之间信息同步的规则...原创 2019-04-09 12:23:09 · 644 阅读 · 0 评论 -
CountDownLatch和join的区别
蚂蚁一面被问到这个问题,当时实在是想不到两者在实现相同功能时的区别,回来百度了一下,发现其实还是蛮简单的问题哈。 首先,两者都能够实现阻塞线程等待完成后,再继续进行后续逻辑,对于两者相同的功能这里不再赘述,我们直接说说它们之间的区别,考虑一个场景,我们的主线程阻塞到某处,等待其它线程完成某些操作之后再继续后续操作,具体就是主线程M,等待子线程T1和T2完成某项操作,但是子线程T1和T2中的...原创 2019-04-09 12:21:11 · 772 阅读 · 0 评论 -
AQS源码详解
一、AQS架构介绍前一批文章介绍了JUC中为了减少锁竞争而用的CAS和Unsafe类,那么针对JUC中的各种同步器,例如常用的ReentrantLock、CountDownLatch等,他们的实现都是继承自AbstractQueuedSynchronizer这个抽象类的,和CAS以及Unsafe一样,这个类是JUC中非常基础的一个类,为了在后续更好的理解各种依托它而实现的类的原理,我们很有必要先...原创 2019-03-07 17:34:21 · 383 阅读 · 0 评论 -
JDK-1.8 HashTable源码分析
文章分析源码依托版本为JDK1.8,先看看HashTable的类关系图,如下: 对于HashTable而言,我们先看它的容器存储结构,关于这一系列容器的源码首先理解了它们设计的存储结构后,相关方法的基本实现思路就能知道个大概了,这里关于HashTable而言,它的存储结构设计还是比较简单的,主要理解一下几个参数即可:private transient Entry<?,?&g...原创 2019-03-05 19:25:44 · 347 阅读 · 0 评论 -
JDK-1.8 HashMap源码分析
和之前的系列一样,我们先上HashMap的类继承关系图,如下: 一般说到HashMap,和它关联最大的应该就是ConcurrentHashMap、HashTable、TreeMap等。之前已经介绍了HashTable,这里通过继承关系图可以看到和HashTable不一样的是,HashMap是继承实现的AbstractMap,而HashTable则是继承实现自Dictionary类。 ...原创 2019-03-05 19:25:05 · 219 阅读 · 0 评论 -
ConcurrentHashMap1.7源码分析
别人十一在外浪啊浪,我还是喜欢自己宅着学习看看书看看电影写写博客美滋滋(不过我觉得还是因为穷才这样自我安慰?)。 ConcurrentHashMap的实现在1.7到1.8有了较大的变化,对此本文主要依据源码和网上查阅的相关博客对源码进行分析和总结。首先会介绍一些前提基础知识,然后对于源码部分主要是依据自己在看的过程中添加的注释方式进行分析,由于本次设计细节较多,可能会有部分内容个人理解有误...原创 2018-10-03 18:34:38 · 8201 阅读 · 3 评论 -
如何使用Intellij Idea编辑源码
Intellij IDEA中的源码无法直接编辑,暂时找到的一个办法是通过maven下载下来源码后,将源码进行解压,解压完后再导入项目作为一个module。具体步骤:依据自己需要编辑的源码,通过maven下载下来对应的source,这里本人需要编辑的是jdk的源码。下载源码后,进行解压到任意路径,然后在Intellij中作为一个module模块导入,这里就已经可以直接编辑这个jar包对应...原创 2018-10-01 11:06:15 · 7758 阅读 · 7 评论 -
Hadoop之ShutdownHookManager源码分析
ShutdownHookManager的设计和jdk包中的设计基本类似,所以很有必要先分析一波jdk中的shutdownHook的源码,具体如下。 在Runtime.java这个类中,有一个方法addShutdownHook,这个方法的作用就是允许用户注册一些JVM异常关闭的处理代码。先说明一下,JVM的关闭退出分为两类: 1> 正常的退出,例如程序运行完毕正常的自动退出、程序...原创 2018-09-04 09:24:29 · 1904 阅读 · 2 评论