JDK8源码分析
文章平均质量分 67
iCoding91
KISS
keep it simple and short
展开
-
TreeSet源码分析-java8
1.特点分析TreeSet是基于TreeMap的NavigableSet实现,所以要想理解好TreeSet,必须研究TreeMap。 TreeMap对其的实现中,key作为存储set中元素的位置,而value始终都是一个static final常量。 时间复杂度为:log(n)的方法:add(),remove(),contains()非线程安全集合 支持浅拷贝、序列化 4个...原创 2018-03-22 12:20:49 · 1256 阅读 · 0 评论 -
ConcurrentHashMap源码分析-Java8
1.ConcurrentHashMap特性说明:因为ConcurrentHashMap单词太长,所以下面均适用CHM替代ConcurrentHashMap同为线程安全集合,但CHM没有任何访问操作需要锁定全表。这也注定了CHM上的操作效率之高。 表访问需要volatile/atomic读,写和CAS.这通过使用内在函数(sun.misc.Unsafe)完成。 向一个空bin中插...原创 2018-04-09 22:14:25 · 1084 阅读 · 2 评论 -
基本类型包装型的缓存值cache
1.基本类型包装类型的缓存值基本类型不包括:float,double bool缓存值:true,false char缓存值:0~127,故ASSII码里面的字符都有缓存其它范围:-128~127 特殊的int:上限默认为127,但可通过-XX:AutoBoxCacheMax设置。 实现方式:定义了缓存数组(bool定义的是常量),且为静态代码块,在类加载时即生成。2...原创 2018-04-15 23:50:50 · 1252 阅读 · 0 评论 -
JDK中涉及的设计模式总结
所有的设计模式都找了一种JDK中的实现(并未列出所有,原因是太多,而且本次整理的目的是通过JDK中的实例完成设计模式的梳理和记忆,所以只写一种实现)。依次对类,对应的方法,功能进行介绍。 创建模式1.抽象工厂javax.xml.parsers.DocumentBuilderFactory抽象类 public static DocumentBuilderFactory...原创 2018-04-16 15:43:55 · 5574 阅读 · 2 评论 -
LinkedHashMap源码分析-java8
得益于昨天网易的面试,所以重新认识了一个集合,回来后赶紧做了分析,继续努力~ps:面试官真的很nice,希望好运~1.特性分析说明:因为LinkedHashMap单词太长,所以以下都用LHM替代 基本数据结构:数组+双向链表+红黑树 因为继承HashMap,故常用属性和HashMap都一样。对于几个node指针的分析: HashMap中的Map.Entry:只有ne...原创 2018-04-12 10:36:37 · 730 阅读 · 0 评论 -
CopyOnWriteArrayList源码分析-java8
1.特性此类是ArrayList的线程安全变体,其中所有更改操作(如add,set等)通过创建底层数组的最新副本来实现 迭代器特性: 迭代器使用快照方式,且在迭代期间数组不会改变,故不会出现并发异常。 迭代器创建后,对list对add,remove不会反映到迭代器中。 迭代器自身不支持remove,set,add操作。这一点和其它集合的迭代器很不一样。 允许元素为nul...原创 2018-04-12 13:02:59 · 471 阅读 · 0 评论 -
Semaphore源码分析-java8
1.特性分析Semaphore就是一个计数的信号量 每一个线程在获取资源前,必须从semaphore获取许可,这保证了一定有可用的资源。 注意:acquire方法并没有使用同步锁机制,这样就保证了acquire方法被调用时,被使用完的资源依然可以放回资源池中。 二元semaphore 它只有两个状态:1表示可用 或者 0表示可用 和java.util.concurrent...原创 2018-04-22 23:32:56 · 567 阅读 · 0 评论 -
CyclicBarrier源码分析-java8
1.特点分析CyclicBarrier是一种同步机制,它可以使得一组线程在同一个障碍点进行等待。 CyclicBarriers 可以通过重置计数器从而重新使用。 CyclicBarrier支持一个可选的Runnable命令(实例化构造函数中的参数),该命令在最后一个线程到达后,但在任何线程被释放之前被执行。这一命令在barrier处只会被执行一次,且由最后到达的线程完成。这种屏障行为对...原创 2018-04-19 09:25:57 · 1357 阅读 · 0 评论 -
AbstractQueuedSynchronizer源码分析-java8
1.AbstractQueuedSynchronizer特点总结类功能宏观描述 此类对实现阻塞锁,依赖FIFO等待队列的同步机制(如semaphores,events等)提供了一个框架。 AQS被作为同步器的辅助子类时,子类应该被定义为非public类型的内部辅助类,以用于实现闭合类的同步属性. CountDownLatch和Semaphore都使用其作为内部辅助类。 此类...原创 2018-05-02 22:52:11 · 630 阅读 · 0 评论 -
Exchanger源码分析-java8
1.特性分析功能 一个用于线程间协作的工具类。用于线程间的数据交换。 实现机制 它提供了一个同步点,在这个同步点,两个线程可以交换彼此的数据。 两个线程通过exchange方法交换数据,如果第一个线程先执行exchange()方法,它会一直等待第二个线程也执行exchange()方法,直到两个线程都到达同步点时,这两个线程就可以交换数据。 应用场景 遗传算法 校对工作...原创 2018-05-04 12:03:33 · 645 阅读 · 0 评论 -
ThreadLocal源码分析-java8
1.特性分析类功能 提供线程本地变量。减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度 为线程提供一个私有的变量副本,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。与类中其它普通变量的区别 普通的变量可以通过线程自身的get和set方法进行访问。本地变量是独立初始化的变量de副本。 ThreadLocal实例声明规则 定义为privat...原创 2018-05-17 13:01:37 · 477 阅读 · 0 评论 -
AbstractSet源码分析-java8
1.3个方法2.Hash值hash=sum(每个元素的hash值) 如果元素为null,则默认hash值为0. 3.removeAll(Collection4.源码分析 package sourcecode.analysis; /** * @Author: cxh * @CreateTime: 18/3/21 20:42 ...原创 2018-03-21 21:29:07 · 342 阅读 · 0 评论 -
Set接口源码分析-java8
1.toArray()和toArray(T[] a)将set实例转为String[]的方式如下: Set<String> x=new HashSet<String>;String[] y = x.toArray(new String[0]); 注意:toArray(new Object[0])和toArray()两者在功能上完全相同. 2.s...原创 2018-03-21 19:08:21 · 424 阅读 · 0 评论 -
TreeMap源码分析-java8
1.特征分析TreeMap是基于NavigableMap的红黑树的实现。默认排序方式:对key升序排序。 TreeMap是非线程同步的。 支持浅拷贝,序列化 红黑树put节点时,分有无比较器分开讨论,这主要是从性能角度考虑的。 代理模式:定义在subMap中的方法,将其行为委托给了NavigableMap来实现,代理模式的使用,消除了需要对Iterator方法进行类型检...原创 2018-03-23 22:38:53 · 413 阅读 · 0 评论 -
JDK8中Map接口的源码分析
package sourcecode.analysis;/** * Created by caoxiaohong on 17/11/11 11:44. * Map接口分析 */import java.io.Serializable;import java.lang.*;import java.util.*;import java.util.function.*;import ...原创 2017-11-11 22:12:02 · 974 阅读 · 0 评论 -
JDK8中AbstractMap类源码分析
抽象类AbstractMap分析原创 2017-11-13 11:01:29 · 290 阅读 · 0 评论 -
JDK8中的Object源码分析
虽然自己的能力有限,可能翻译的理解的不够到位,但是还是觉得蛮有收获的。贴出分析:package sourcecode.analysis;/** * Created by caoxiaohong on 17/11/13 11:08. *//** * Class {@code Object} is the root of the class hierarchy. * E原创 2017-11-17 23:42:29 · 447 阅读 · 0 评论 -
JDK8中的Comparable<T>接口源码分析
1、这个接口里面只有一个方法:compareTo(T o)。所以,分析时,主要是对作者对这个接口的注释进行了研究。2、分析:package sourcecode.analysis;/** * Created by caoxiaohong on 17/11/18 23:14. */import java.util.*;/** * This interface imp原创 2017-11-19 23:34:16 · 818 阅读 · 0 评论 -
JDK8中CharSequence接口源码分析
本来是要看String类的,结果看了两个String类的实现接口,毕竟没有分析过嘛,所以还要看的,这回明天终于可以看String类里面的代码了^_^这个接口内容还是蛮少的,下面贴出分析。package sourcecode.analysis;/** * Created by caoxiaohong on 17/11/18 23:18. */import java.lan原创 2017-11-21 22:39:09 · 1918 阅读 · 3 评论 -
HashMap源码分析
1.HashMap特点key和value都允许为null实现方式:数组+链表+红黑树非线程安全(这一点区分于HashTable,二者除去这一点,其它基本一致)rehash条件:entry个数>负载因子*capacity负载因子默认值:0.75容量(bucket个数)默认值:16链表转为红黑树阈值:8红黑树转为链表阈值:6bucket数组被转为树的阈值:64扩容倍数:2...原创 2018-03-08 23:30:13 · 348 阅读 · 0 评论 -
ArrayList源码分析-java8
1.特点总结:可存储元素null 调用无参构造器创建实例,默认容量capacity=10 自动扩容倍数:1.5 和Vector类等价,区别是 ArrayList不是线程安全的. 4个重要的private static final类型实例变量: EMPTY_ELEMENTDATA 空实例的共享空数组 在capacity=0时的共享,令elementData...原创 2018-03-15 20:22:37 · 328 阅读 · 0 评论 -
List接口-java8
1.List接口特性:List接口定义中元素可以为null,但是对接口的不同class实现却不一定。方法调用带来了内存空间损耗(和母list元素不共享内存): toArray() 方法调用可能带来内存空间损耗: toArray(T[] a)java8新增default方法: replaceAll()sort() , 采用归并排序spliterator() , 并行分隔迭代器...原创 2018-03-11 11:08:56 · 484 阅读 · 0 评论 -
CountDownLatch源码分析
1.java.util.concurrent中高级的工具分为三类Executor Framework并发集合(Concurrent Framework)同步器 本文章是对常用同步器CountDownLatch进行介绍 2.同步器定义:是一些使线程能够等待另一个线程的对象,允许它们协调工作.常用同步器:CountDownLatch和Semaphore不常用同步器...原创 2018-03-11 19:39:46 · 261 阅读 · 0 评论 -
AbstractList源码分析-java8
1.说明AbstractList是List的骨架实现 唯一构造器.(通常由子类构造函数隐式调用,因为protected修饰,且无参数,所以可以被子类使用) 2个私有内部类:Itr,ListItr。Itr实现了Iterator接口;ListItr继承了Itr,且实现了ListIterator接口。 2个辅助类:SubList,RandomAccessSubList。其中SubLis...原创 2018-03-12 12:01:32 · 483 阅读 · 0 评论 -
ListIterator接口源码分析-java8
1.ListIterator VS Iterator:ListIterator是对接口Iterator的继承 Iterator只有4个操作方法:hasNext,next,remove,forEachRemaining,其中forEachRemaining是JDK8新增方法ListIterator比Iterator多出5个方法:hasPrevious,previous,nextIndex...原创 2018-03-13 19:29:11 · 235 阅读 · 0 评论 -
Thread源码分析-java8
1.Thread特性分析守护线程Daemon 定性:支持性线程,主要用于程序中后台调度以及支持性工作。当JVM中不存在Daemon线程时,JVM将会退出。将一个线程设定为Daemon的方法: 调用Thread.setDaemon(true)。Daemon属性的设定只能在启动线程前设置,启动线程后不能设置。JVM退出时Daemon线程中的finally块中的代码不一定会执行。因此不...原创 2018-05-14 17:16:46 · 2986 阅读 · 1 评论