Java8源码分析
文章平均质量分 86
linxdcn
这个作者很懒,什么都没留下…
展开
-
【Java8源码分析】集合框架-ArrayList
一、源码和注解package java.util;public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ private static final long serialVersionUID = 8原创 2017-04-29 22:37:43 · 1332 阅读 · 0 评论 -
【Java8源码分析】集合框架-TreeMap
一、红黑树原理TreeMap是基于红黑树实现的。一棵高度为h的二叉搜索树,它可以支持任何一种基本动态集合操作,其时间复杂度均为O(h)。当h较小时,执行会比较快。红黑树是许多“平衡”搜索树中的一种。 (1)性质树中的结点有5个属性:color,key,key,left,right和p,满足以下五大性质:每个结点或是Red,或是Black根结点是Black的每个叶结点NIL是Black的原创 2017-05-21 21:12:02 · 1973 阅读 · 0 评论 -
【Java8源码分析】IO包-InputStream、FileInputStream和BufferedInputStream总结
转载请注明出处:http://blog.csdn.net/linxdcn/article/details/72875258Java的IO类型可分为两大类:面向字符流:Reader & Writer面向字节流:InputStream & OutputStream本文主要从源码方面分析一下常用的面向字节流的输入流。InputStream:所有输入流的抽象父类,定义了常用输入原创 2017-06-06 22:11:33 · 1815 阅读 · 1 评论 -
【Java8源码分析】IO包-Reader、BufferedReader和Scanner总结
转载请注明出处:http://blog.csdn.net/linxdcn/article/details/72886231Java的IO类型可分为两大类:面向字符流:Reader & Writer面向字节流:InputStream & OutputStream本文主要从源码方面分析一下常用的面向字符流的Reader。Reader:所有字符流的抽象父类,定义了常用输入函数原创 2017-06-06 22:11:55 · 2370 阅读 · 0 评论 -
【Java8源码分析】locks包-AbstractQueuedSynchronizer同步器
转载请注明出处:http://blog.csdn.net/linxdcn/article/details/728440111 前言目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容。数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的CPU指令。在jav原创 2017-06-02 21:32:30 · 1256 阅读 · 0 评论 -
【Java8源码分析】locks包-ReentrantLock
1 辅助内部类在ReetrantLock内部基于AQS类实现了一个抽象类Sync同步器,对于AQS不熟悉的,可以看看这篇文章:AbstractQueuedSynchronizer同步器。基于Sync还实现了公平锁和非公平锁:公平锁 线程按照他们发出请求的顺序获取锁如果有另一个线程持有锁或者有其他线程在等待队列中等待这个所,那么新发出的请求的线程将被放入到队列中。非公平锁 当一个线原创 2017-06-03 11:16:32 · 1918 阅读 · 0 评论 -
【Java8源码分析】NIO包-Buffer类:ByteBuffer与HeapByteBuffer(一)
转载请注明出处:1 概述 Java NIO 由以下几个核心部分组成:BufferChannelSelectors相关类的使用方法可以参考Java NIO 系列教程,写的通俗易懂。本文主要从源码方面分析一下Buffer类2 Buffer类Buffer类是一个抽象类,所有的XxxBuffer均继承此类。Buffer类的作用跟BufferedRead原创 2017-06-07 22:31:28 · 3378 阅读 · 0 评论 -
【Java8源码分析】locks包-ReentrantReadWriteLock
转载请注明出处:http://blog.csdn.net/linxdcn/article/details/728549241 ReadWriteLock的使用下面截取一段官网上的使用说明例子class CachedData { Object data; volatile boolean cacheValid; final ReentrantReadWriteLock rwl = n原创 2017-06-03 22:38:48 · 1050 阅读 · 0 评论 -
【Java8源码分析】NIO包-Buffer类:内存映射文件DirectByteBuffer与MappedByteBuffer(二)
转载请注明出处:http://blog.csdn.net/linxdcn/article/details/72896616原创 2017-06-08 21:16:53 · 7107 阅读 · 2 评论 -
【Java8源码分析】NIO包-FileChannel
转载请注明出处:http://blog.csdn.net/linxdcn/article/details/728966161 概述Java NIO 由以下几个核心部分组成:BufferChannelSelectors 相关类的使用方法可以参考Java NIO 系列教程,写的通俗易懂。本文主要从源码方面分析一下Channel类。2 Channel原创 2017-06-12 22:53:56 · 2534 阅读 · 1 评论 -
【Java8源码分析】线程池-Executor与ExecutorService的全面剖析
转载请注明出处:http://blog.csdn.net/linxdcn/article/details/728283621 Executor接口与ExecutorService接口1.1 介绍Executor接口很简单,只定义了一个execute函数用来提交一个Runnable的任务。该方式提交的任务不能获取返回值,因此无法判断任务是否执行成功。public interf原创 2017-06-01 19:29:00 · 5283 阅读 · 0 评论 -
【Java8源码分析】并发包-ConcurrentHashMap(二)
转载请注明出处:http://blog.csdn.net/linxdcn/article/details/72871732上一篇并发包-ConcurrentHashMap(一)主要介绍了ConcurrentHashMap的存储结构以及容器的存取方法的源码。 ConcurrentHashMap主要采用上图所示的结构存储元素,在插入第一个元素时采用CAS算法,其余的插入、更新、删原创 2017-06-05 23:26:37 · 1164 阅读 · 0 评论 -
【Java8源码分析】并发包-ConcurrentHashMap(一)
一、CAS原理简介Java8中,ConcurrentHashMap摒弃了Segment的概念,而是启用了一种全新的方式实现:利用CAS算法。它沿用了HashMap的思想,底层依然由“数组”+链表+红黑树的方式实现。那什么CAS算法呢?以前采用锁的方式实现同步,对于简单问题来说显得粒度过大,影响效率。现在的处理器都支持多重处理,当然也包含多个处理器共享外围设备和内存,同时,加强了指令集以支持原创 2017-05-26 21:09:53 · 1079 阅读 · 0 评论 -
【Java8源码分析】集合框架-LinkedList
一、总结(1)LinkedList有两个构造参数,一个为无參构造,只是新建一个空对象,第二个为有参构造,新建一个空对象,然后把所有元素添加进去。(2)LinkedList的存储单元为一个名为Node的内部类,包含pre指针,next指针,和item元素,实现为双向链表(3)LinkedList的删除、添加操作时间复杂度为O(1),查找时间复杂度为O(n),查找函数有一定优化,容器会先判断查找的元素是原创 2017-05-02 16:22:50 · 824 阅读 · 0 评论 -
【Java8源码分析】集合框架-HashMap
一、HashMap的存储结构总共有两种存储类// 1. 哈希冲突时采用链表法的类,一个哈希桶多于8个元素改为TreeNodestatic class Node<K,V> implements Map.Entry<K,V>// 2. 哈希冲突时采用红黑树存储的类,一个哈希桶少于8个元素改为Nodestatic final class TreeNode<K,V> extends LinkedHas原创 2017-05-10 22:53:11 · 2500 阅读 · 0 评论 -
【Java8源码分析】并发包-AtomicInteger
AtomicInteger类是实现了原子操作的Integer,以往对于保证int、double、float等基础类型的运算原子性,需要采用加锁的方式。但是为了一个简单的运算操作采用锁,在多线程竞争严重的情况下,会导致性能降低,所以在java1.5推出了Atomic包,是采用CAS算法实现原子性运算。一、CPU锁CPU锁有如下3种类型:(1)处理器自动保证基本内存操作的原子性首先处理器会自动保证基本的原创 2017-05-27 20:31:38 · 2099 阅读 · 0 评论 -
【Java8源码分析】并发包-CopyOnWriteArrayList
一般的,集合框架的类都有对应的并发版本,如下图所示 单线程版 多线程版 ArrayList CopyOnWriteArrayList LinkedList ConcurrentLinkedQueue HashMap ConcurrentHashMap TreeMap ConcurrentSkipListMap TreeSet ConcurrentSkip原创 2017-05-28 20:35:33 · 1865 阅读 · 1 评论 -
【Java8源码分析】并发包-Semaphore
转载请注明出处:http://blog.csdn.net/linxdcn/article/details/72857243Semaphore是信号量,它的作用是控制多个允许。打个比方,一个博物馆有容纳1000人的能力(Semaphore的允许是1000),假如1500人同时来参馆,只有1000人能获得允许入馆(获得锁),其余的500则需排队(阻塞),直到馆内的人离开(释放锁)才能放人入原创 2017-06-04 20:16:23 · 818 阅读 · 0 评论 -
【Java8源码分析】并发包-CountDownLatch
转载请注明出处:http://blog.csdn.net/linxdcn/article/details/72857496CountDownLatch提供了一种能使多个线程触发同一条件,开始运行的机制。打个比方,银行金库有3把钥匙(CountDownLatch的count为3),得到一把钥匙(调用countDown函数),就离获得通行的条件越近。当3把钥匙都已经获取时(count变为0原创 2017-06-04 22:29:29 · 788 阅读 · 0 评论 -
【Java8源码分析】并发包-CyclicBarrier
转载请注明出处:http://blog.csdn.net/linxdcn/article/details/72857700CyclicBarrier允许一系列线程相互等待对方到达一个点,正如 barrier 表示的意思,该点就像一个栅栏,先到达的线程被阻塞在栅栏前,必须等到所有线程都到达了才能够通过栅栏。Cyclic的意思是这个屏障是能重复使用的。CyclicBarrier内部是基于R原创 2017-06-04 23:26:05 · 991 阅读 · 0 评论 -
【Java8源码分析】线程-Thread类的全面剖析
一、基本知识(1)线程特性每个线程均有优先级线程能被标记为守护线程每个线程均分配一个name(2)创建线程的方法继承Thread类,并重现run方法// 继承Thread类class PrimeThread extends Thread { long minPrime; PrimeThread(long minPrime) { this.minPrime = m原创 2017-05-31 15:46:13 · 6186 阅读 · 3 评论 -
【Java8源码分析】线程-ThreadLocal的全面剖析
一、背景ThreadLocal类顾名思义就是,申明为ThreadLocal的变量,对于不同线程来说都是独立的。下面是一个例子:public class Test { public static void main(String[] args) { ThreadLocalTest threadLocalTest = new ThreadLocalTest(); fo原创 2017-05-31 23:19:00 · 1651 阅读 · 0 评论 -
【Java8源码分析】NIO包-Selector选择器
转载请注明出处:http://blog.csdn.net/linxdcn/article/details/728966161 转载请注明出处:http://blog.csdn.net/linxdcn/article/details/72850375原创 2017-06-13 22:09:58 · 1796 阅读 · 0 评论