java源码分析
股海孙悟空
wx 公众号 股海孙悟空
展开
-
《Java NIO》:Channel and Buffer (通道和缓冲区)
《Java NIO》:Channel and Buffer (通道和缓冲区) 关于Java NIO涉及到三个重要的概念: 1、Channel 通道 2、Buffer 缓冲区 3、Selector 选择器 在这篇文章的评论中对Java NIO 中的三个概念用一个比方来讲述,比较好理解,摘入如下: 其中Channel对应以前的流,Buffer不是什么新东西,Sele原创 2017-09-08 09:12:04 · 396 阅读 · 0 评论 -
《Java源码分析》:CountDownLatch
《Java源码分析》:CountDownLatch Latch:闭锁。 有人把Latch比喻成是一个门,在门打开之前,所有想进门的线程都被阻塞,在门打开之后,所有想进门的线程全部通过,且门打开之后就不能再关闭。 CountDownLatch是一个同步辅助类,允许一个或多个线程等待直到其它线程的一些操作已经准备完成。 CountDownLatch是JDK 5+里面闭锁原创 2017-09-12 10:24:25 · 191 阅读 · 0 评论 -
《Java源码分析》:ReadWriteLock(第一部分)
《Java源码分析》:ReentrantLock.unlock 释放锁 ReentrantLock.unlock() API给出的介绍为: 试图释放此锁。 如果当前线程是此锁所有者,则将保持计数减 1。如果保持计数现在为 0,则释放该锁。如果当前线程不是此锁的持有者,则抛出 IllegalMonitorStateException。 下面就从源码的角度来分析原创 2017-09-12 10:24:52 · 185 阅读 · 0 评论 -
《Java源码分析》:ReadWriteLock(第二部分)
《Java源码分析》:ReadWriteLock(第二部分) 本篇博文主要介绍了ReentrantReadWriteLock内部实现。 ReadWriteLock是一个接口,如下: public interface ReadWriteLock { /** * Returns the lock used for reading.原创 2017-09-12 10:25:22 · 186 阅读 · 0 评论 -
《Java源码分析》:CopyOnWriteArrayList/ CopyOnWriteArraySet
《Java源码分析》:CopyOnWriteArrayList/CopyOnWriteArraySet CopyOnWriteArrayList/CopyOnWriteArraySet的基本思想是一旦对容器有修改,那么就“复制”一份新的集合,在新的集合上修改,然后将新集合复制给旧的引用。当然了这部分少不了要加锁。显然对于CopyOnWriteArrayList/CopyOnWriteArra原创 2017-09-12 10:27:26 · 275 阅读 · 0 评论 -
《Java线程池》Executor 以及Executors
《Java线程池》Executor 以及Executors 线程池的相关类的体系结构如下: 先看Executor接口,是最根上的接口 public interface Executor { /* * Executes the given command at some time in the future. The comman原创 2017-09-12 10:28:36 · 205 阅读 · 0 评论 -
《Java线程池》:Executor生命周期
《Java线程池》:Executor生命周期 我们知道线程是有多种执行状态的,同样管理线程的线程池也有多种状态。JVM会在所有线程(非后台daemon线程)全部终止后才退出,为了节省资源和有效释放资源关闭一个线程池就显得很重要。有时候无法正确的关闭线程池,将会阻止JVM的结束。 线程池Executor是异步的执行任务,因此任何时刻不能够直接获取提交的任务的状态。这些任务有可能已经完成,原创 2017-09-12 10:30:15 · 248 阅读 · 0 评论 -
《Java源码分析》:TreeMap
《Java源码分析》:TreeMap 今天把TreeMap的源码稍微看了下,TreeMap的内部是基于红黑树来完成的。 由于红黑树确实在我们的实际编码过程中用的比较少,因此自己对红黑树的认知不是很深,只是稍微有点印象罢了。 由于TreeMap是基于红黑树来完成,因此 ,首先先列出红黑树的5个性质: 性质 1:每个节点要么是红色,要么是黑色。 性质 2:根节点永远是黑色原创 2017-09-08 09:14:14 · 265 阅读 · 0 评论 -
《Java源码分析》:Stack
1、Stack的继承结构 public class StackE> extends VectorE> 12 看见没,Stack类继承Vector来实现的。 Stack相对于Vector添加的方法 public Stack() { } //添加元素 public E push(E item) { addElement(i原创 2017-09-11 08:43:52 · 323 阅读 · 0 评论 -
《Java源码分析》:Vector
《Java源码分析》:Vector 1、Vector的继承结构 public class VectorE> extends AbstractListE> implements ListE>, RandomAccess, Cloneable, java.io.Serializable1234 从继承结构可以看出,Vector继承了Abstrac原创 2017-09-08 09:38:24 · 265 阅读 · 0 评论 -
Executors类中创建线程池的几种方法的分析
Executors类中创建线程池的几种方法的分析 要配置一个线程池是比较复杂的,尤其是对于线程池的原理不是很清楚的情况下,很有可能配置的线程池不是较优的,因此在Executors类里面提供了一些静态工厂,生成一些常用的线程池。 1、newFixedThreadPool:创建固定大小的线程池。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线原创 2017-09-08 09:13:10 · 209 阅读 · 0 评论 -
Java NIO 之 Buffer
《Java源码分析》:Java NIO 之 Buffer 在Java API文档中,对Buffer的说明摘入如下: Buffer:是一个用于特定基本数据类型的容器。这里的特定基本数据类型指的是:除boolean类型的其他基本上数据类型。 缓冲区是特定基本数据类型元素的线性有限序列。除内容外,缓冲区饿基本属性还包括三个重要的属性,如下: 1、capacity(容量):表示Bu原创 2017-09-08 09:09:52 · 280 阅读 · 0 评论 -
《Java源码分析》:Exchanger
《Java源码分析》:Exchanger Exchanger类用于两个线程之间交换数据。 Exchanger类只有两个方法: 1、V exchange(V x) 等待另一个线程到达此交换点(除非当前线程被中断),然后将给定的对象传送给该线程,并接收该线程的对象。 API给出的详细说明如下: public V exchange(V x) throws Inter原创 2017-09-12 10:23:51 · 196 阅读 · 0 评论 -
HashMap对HashCode碰撞的处理
先说Java之外的,什么是拉链法?怎么解决冲突的: 拉链法解决冲突的做法是:将所有关键字为同义词的结点链接在同一个单链表中。若选定的散列表长度为m,则可将散列表定义为一个由m个头指针组成的指针数组t[0..m-1]。凡是散列地址为i的结点,均插入到以t为头指针的单链表中。t中各分量的初值均应为空指针。在拉链法中,装填因子α可以大于1,但一般均取α≤1。 换句话说:HashCode是原创 2017-09-12 10:23:07 · 264 阅读 · 0 评论 -
《Java源码分析》:Semaphore
《Java源码分析》:Semaphore Semaphore 是一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。 说白了,Semaphore是原创 2017-09-11 10:34:39 · 309 阅读 · 0 评论 -
《JAVA源码分析》:ArrayList
《JAVA源码分析》:ArrayList ArrayList继承体系结构如下: public class ArrayListE> extends AbstractListE> implements ListE>, RandomAccess, Cloneable, java.io.Serializable12 ArrayList类主要是继承AbstractList类并实原创 2017-09-08 09:18:41 · 248 阅读 · 0 评论 -
《JAVA源码分析》:LinkedList
LinkedList源码分析 今天就来看下LinkedList的源码,先看下LinkedList的继承体系结构。 public class LinkedListE> extends AbstractSequentialListE> implements ListE>, DequeE>, Cloneable, java.io.Serializable123 Linked原创 2017-09-08 09:22:01 · 241 阅读 · 0 评论 -
《Java源码分析》:Hashtable
Java源码分析》:Hashtable Hashtable类的实现也是基于“数组和链表”来实现的。 Hashtable的继承关系为: public class HashtableK,V> extends DictionaryK,V> implements MapK,V>, Cloneable, java.io.Serializable 123原创 2017-09-08 09:30:50 · 200 阅读 · 0 评论 -
《Java源码分析》:HashMap
《Java源码分析》:HashMap HashMap和Hashtable一样,底层都是基于“数组和链表”来实现的 1、HashMap的继承结构 public class HashMapK,V> extends AbstractMapK,V> implements MapK,V>, Cloneable, Serializable 12 HashMap继承了原创 2017-09-08 09:33:25 · 174 阅读 · 0 评论 -
《Java源码分析》:LinkedHashMap
《Java源码分析》:LinkedHashMap 1、LinkedHashMap的继承结构 public class LinkedHashMapK,V> extends HashMapK,V> implements MapK,V>123 从结构可以看出,LinkedHashMap继承HashMap并实现了Map接口。 2、LInkedHa原创 2017-09-08 09:35:52 · 205 阅读 · 0 评论 -
《Java源码分析》:HashSet
说明:我们都知道HashSet集合是不允许重复元素的,因此这个类的利用什么来保证这个集合里面不会有重复的元素呢?结论是:HashSet是借助于HashMap的key不允许重复这个特性来实现的。想想这个思想确实比较奇妙,是吧,HashMap是操作键值对,而HashSet是操作HashMap的key完成相关操作,或者这么说,HashSet全部的操作是借助于HashMap经过某种封装得到的 下面来原创 2017-09-11 08:45:56 · 237 阅读 · 0 评论 -
《Java源码分析》:LinkedHashSet
HashSet是借助于HashMap来进行实现的,而LinkedHashSet是基于LinkedHashMap进行实现的。 1、LinkedHashSet的继承体系 LinkedHashSet是继承HashSet类,并实现了Set接口。因此具有HashSet类的一切特性。 public class LinkedHashSetE> extends HashSet原创 2017-09-11 08:47:00 · 241 阅读 · 0 评论 -
《Java源码分析》:WeakHashMap
说明:WeakHashMap也是一个“数组和链表”的结合体 1、WeakHashMap的继承结构 public class WeakHashMapK,V> extends AbstractMapK,V> implements MapK,V> 123 WeakHashMap与HashMap一样,都是继承AbstractMap并实现了Map接口。与原创 2017-09-11 08:50:39 · 226 阅读 · 0 评论 -
WeakHashMap和HashMap的区别
WeakHashMap和HashMap的区别 前面对HashMap的源码和WeakHashMap的源码分别进行了分析。在WeakHashMap源码分析博文中有对与HashMap区别的比较,但是不够具体系统。加上本人看了一些相关的博文,发现了一些好的例子来说明这两者的区别,因此,就有了这篇博文。 WeakHashMap和HashMap一样,WeakHashMap也是一个散列表,它存储的内原创 2017-09-11 08:52:14 · 459 阅读 · 0 评论 -
《Java源码分析》:ReferenceQueue、Reference及其子类
《Java源码分析》:ReferenceQueue、Reference及其子类 在看完WeakHashMap源码之后,看了有关于讲解WeakHashMap的些许博客,发现了几个比较有意思的类:Reference、Reference子类(SoftReference、WeakReference、PhantomReference)以及ReferenceQueue。 以前自己只是知道这些类的存原创 2017-09-11 08:57:45 · 240 阅读 · 0 评论 -
《Java源码分析》:ReentrantLock.lock 锁机制
《Java源码分析》:ReentrantLock.lock 锁机制 AbstractQueuedSynchronizer这个类真的很难也很复杂,是构建锁以及实现其他相关同步类的基础框架。本来是没有打算来研究下这个类,但是由于想了解锁机制,因此,不可避免的需要研究它。 但是这个类确实很难,自己看了几遍这个类也还是没有过多的看懂,本篇博文只能说是对自己看这个类的一点点理解和记录,若有错,请原创 2017-09-11 10:30:01 · 218 阅读 · 0 评论 -
《Java源码分析》:ReentrantLock.unlock 释放锁
《Java源码分析》:ReentrantLock.unlock 释放锁 ReentrantLock.unlock() API给出的介绍为: 试图释放此锁。 如果当前线程是此锁所有者,则将保持计数减 1。如果保持计数现在为 0,则释放该锁。如果当前线程不是此锁的持有者,则抛出 IllegalMonitorStateException。 下面就从源码的角度来分析如何释放原创 2017-09-11 10:31:35 · 282 阅读 · 0 评论 -
《Java源码分析》:Condition
《Java源码分析》:Condition API文档中对Condtion类列出的方法的说明如下 1、 void await() 造成当前线程在接到信号或被中断之前一直处于等待状态。 2、 boolean await(long time, TimeUnit unit) 造成当前线程在接到信号、被中断或到达指定等待时间之前一直处于等待状态。 3、lo原创 2017-09-11 10:33:17 · 381 阅读 · 0 评论 -
《Java困惑》:多并发情况下HashMap是否还会产生死循环
《Java困惑》:多并发情况下HashMap是否还会产生死循环 ConcurrentHashMap是Java 5中支持高并发、高吞吐量的线程安全HashMap实现, 在看很多博客在介绍ConcurrentHashMap之前,都说HashMap适用于单线程访问,这是因为HashMap的所有方法都没有进行锁同步,因此是线程不安全的,不仅如此,当多线程访问的时候还容易产生死循环。原创 2017-09-12 10:21:52 · 379 阅读 · 0 评论