Java源码
文章平均质量分 87
「已注销」
这个作者很懒,什么都没留下…
展开
-
C Objcet类
Object类是Java所有类的始祖,在Java中每个类都是由它扩展而来。如果一个类没有指出它的超类,Object就被认为是这个类的超类。JDK文档中这样描述Object类Class Object is the root of the class hierarchy. Every class hasObject as a superclass. All objects, includi原创 2015-07-23 06:54:35 · 707 阅读 · 0 评论 -
Integer 缓存策略
在很多情况下,容易有一种假象,即基本类型与他们的对象包装器是一样的,只是他们的相等性不同。当使用==比较对象时,只不过检测他们是否指向同一个储存区域。因此,下面的比较通常不会成立:Integer a=1000;Integer b=1000;return a==b;然而,在Java中,它们可能是成立的。因为Java中,对于一些数据类型的“常用数值”采用了缓存策略。下面来看看Int原创 2015-07-23 08:06:17 · 942 阅读 · 3 评论 -
Java中的线程池——3种常用的ThreadPoolExecutor
在Executor框架下,利用Executors的静态方法可以创建三种类型的常用线程池。他们可分别对应不同的应用场景,下面来看看这三个线程池。1 FixedThreadPool这个线程池可以创建固定线程数的线程池。它的构造源码如下:public static ExecutorService newFixedThreadPool(int nThreads) { r原创 2015-12-24 09:25:22 · 7628 阅读 · 4 评论 -
Java中的线程池——ThreadPoolExecutor的原理
1 线程池的处理流程向线程池提交一个任务后,它的主要处理流程如下图所示一个线程从被提交(submit)到执行共经历以下流程:线程池判断核心线程池里是的线程是否都在执行任务,如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则进入下一个流程线程池判断工作队列是否已满。如果工作队列没有满,则将新提交的任务储存在这个工作队列里。如果工作队列满了,则进入下原创 2015-12-22 19:59:42 · 9246 阅读 · 0 评论 -
Java中的锁——ReentrantReadWriteLock(读写锁)
上一篇里讲的ReentrankLock是一种排他锁,即同一时间只能有一个线程进入。而读写锁在同一时刻允许多个读线程访问,但是在写线程访问时,所有的读线程和其他线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读写锁,使得并发性比一般的排它锁有了很大提升。因为大多数应用场景都是读多于写的,因此在这样的情况下,读写锁可以提高吞吐量。下图描述了关于读写锁的三个特性:公平性、重入性和锁降级。原创 2015-12-21 10:07:12 · 3030 阅读 · 3 评论 -
Synchronized与三种锁态
介绍Sychronized的锁实现原理以及三种锁态(偏向锁、轻量级锁和重量级锁)的关系原创 2015-12-17 20:53:38 · 8195 阅读 · 0 评论 -
Java中的锁——队列同步器
队列同步器AbstractQueuedSynchronizer(AQS),似乎我们不经常用,但是它是用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。下图显示了java.concurrent包的实现示意图同步器的主要使用方式是继承,一般作为同步器组件的静态内部类,在同步器中仅定义了与状态相关的方法,且这个状原创 2015-12-20 13:27:12 · 8164 阅读 · 10 评论 -
Java中的锁——重入锁ReentrantLock
ReentrantLock 是一种支持支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁,除此之外,该锁还支持获取锁的公平性和非公平性选择。1 重入的实现对于锁的重入,我们来想这样一个场景。当一个递归方法被sychronized关键字修饰时,在调用方法时显然没有发生问题,执行线程获取了锁之后仍能连续多次地获得该锁,也就是说sychronized关键字支持锁的重入。对于Reentr原创 2015-12-20 14:48:00 · 4059 阅读 · 0 评论 -
ArrayList源代码分析
本源代码来自JDK1.8 与1.7、1.6 略有不同1 ArrayList中的属性1 初始容量初始大小为10/** * Shared empty array instance used for empty instances. */ private static final Object[] EMPTY_ELEMENTDATA = {};原创 2015-05-11 19:18:51 · 2337 阅读 · 0 评论 -
ConcurrentHashMap源码分析(JDK8版本)
注:本文源码是JDK8的版本,与之前的版本有较大差异ConcurrentHashMap是conccurrent家族中的一个类,由于它可以高效地支持并发操作,以及被广泛使用,经典的开源框架Spring的底层数据结构就是使用ConcurrentHashMap实现的。与同是线程安全的老大哥HashTable相比,它已经更胜一筹,因此它的锁更加细化.原创 2015-08-26 19:10:16 · 55733 阅读 · 42 评论 -
LinkedList源码分析
LinkedList 继承了AbstractSequentialList类 实现了 List, Deque, Cloneable, java.io.Serializable接口LinkedList 顾名思义 一个链式的表。那么底层数据结构就是一个链表维护的。这个链表的单元就是一个一个节点。下面来分析LinkedList的节点。1 Nod原创 2015-05-19 19:03:37 · 683 阅读 · 0 评论 -
类加载器内存泄露与tomcat自定义加载器
类加载器如何发生内存泄露,以及Tomcat与类加载器有关的源代码,分析了Tomcat的启动流程原创 2015-12-14 10:59:13 · 4172 阅读 · 1 评论