菜鸟的jdk源码学习

2018-11-11  本文已影响0人  wittycat

java源码学习,(基于java version 1.8.0_60)

1.基础部分(原理,运用熟练掌握)

1.1java.util

   这个包主要以集合为主,这是数据结构的最佳实践。
集合罗列
集合 查询时间复杂度 继承前列 线程安全 支持排序
Map HashMap LinkedHashMap HashTable TreeMap
Set HashSet LinkedHashSet TreeSet
~ 线程安全 继承前列线程安全
List ArrayList LinkedList Vector Stack
相似比较
Name 同作用 不同作用
Iterator 支持遍历 支持fail-fast[ConcurrentModificationException]机制,通过迭代器可以对集合删除;可以对集合进行增强for循环遍历【Iterable和Iterator一起使用,Iterable像管理者,产生Iterator,Iterator负责执行
Enumeration 支持遍历
Map 支持key-value 功能强(官方建议使用map)
Dictionary 支持key-value 和map比较功能弱
Comparable 支持比较 实体直接实现
Comparator 支持比较 更灵活,实体可以实现多个

1.1.1Map相关

1.1.1.1HashMap

几种时间复杂度
结构 查询时间复杂度 说明
hash表 O(1)
链表 O(n) 遍历链表去查找
红黑树 O(log n)
多线程下当共享变量使用时,扩容链表造成的问题
版本 元素是否倒置 元素是否丢失 复杂程度
1.7 倒置(易形成闭合回路) 没验证 代码量约1000行
1.8 不倒置(99%的认为不会形成,1%再验证) 会丢失 代码量约2000行
解决办法 不当共享变量使用(在局部变量中 new创建 是没问题的,在栈中操作,属于私有的)或使用Collections.synchronizedMap(Map<K, V>)包装或使用ConcurrentHashMap
1.1.1.2HashTable
1.1.1.3TreeMap
1.1.1.4LinkedHashMap

几种map总结:
    1、在存储上基本与value没有关系,主要依赖K和K的hash值来放置到合适位置。
    2、内部实现上基本以循环操作为主。

1.1.2Set相关

1.1.2.1HashSet
1.1.2.3LinkedHashSet
1.1.2.2TreeSet

1.1.3List相关

1.1.2.1ArrayList
1.1.2.2LinkedList
1.1.2.3Vector
1.1.2.3Stack

1.1.4工具类

1.2java.io

理解类提供的功能,才能更准确的使用。要理解io必须先了解一些基本的概念和区别。
io字节输入流(不是所有的输入输出都一一对应)
io字节输入流
io字节输出流
io字节输出流
io字符输入流
io字符输出流
io字符输出流
io字符输出流

1.3java.lang

java的base包,唯一一个只使用不用导包的包。
主要类的类型有:基本类型的包装类型,异常类,进程类,Thread的相关类,字符(串)的系列类。

1.4java.util除过集合的其他类

2.高级部分(深刻理解)

2.1java.lang.reflect

2.1.1反射

反射类的主要关系

2.1.2动态代理

动态代理执行逻辑

2.2java.util.concurrent.*

并发包主要内容:原子类,锁,容器,线程池,框架,工具类
并发主要内容

2.2.1原子类

2.2.2锁

主要类关系:

Lock包主要类关系

2.2.2.1AQS

2.2.2.1.1关键词理解
模板方法,互斥锁(排它锁),共享锁,同步队列,阻塞队列(条件队列),LockSupport,ConditionObject

注意:Object的监视器只有一个同步队列和一个阻塞队列;而AQS却有一个同步队列和多个阻塞队列,对应多个ConditionObject

2.2.2.1.2同步队列和阻塞队列的节点互相转化(结合ReentrantLock说明)

注意使线程节点进入阻塞队列的不适合AQS实现的共享锁操作,因为newCondition.await()其中会调用tryRelease(long arg),而共享锁不会实现这个

2.2.2.1.3lock ,unLock,await,signal(signalAll:相当于循环操作signal)的逻辑分析(结合ReentrantLock说明)

2.2.2.2ReentrantLock

ReentrantLock内部关系

2.2.2.3ReentrantReadWriteLock

ReentrantReadWriteLock内部关系

2.2.3容器

主要并发容器


并发容器

2.2.3.1队列

2.2.3.2Copy-On-Write简称COW,仅2个类Set和List

2.2.3.3Concurrent*集合

均为安全的集合ConcurrentHashMap采用加锁,其他几个采用CAS无锁更新

Key-Value数据结构

目前常用的key-value数据结构有三种:Hash表、红黑树、SkipList

名称 描述
hash表 即数组:例如:Hashmap(Hash表+链表+红黑树),HashTbale(Hash表+链表) 插入、查找最快,为O(1);如使用链表实现则可实现无锁;数据有序化需要显式的排序操作。
红黑树 例如:TreeMap 插入、查找为O(logn),但常数项较小;无锁实现的复杂性很高,一般需要加锁;数据天然有序。
Skip表 例如:ConcurrentSkipListMap,插入、查找为O(logn),但常数项比红黑树要大;底层结构为链表,可无锁实现;数据天然有序。

2.2.4线程池

线程池常用类关系

线程池常用类关系

2.2.4.1ExecutorCompletionService

2.2.4.2FutureTask

2.2.4.3两种线程池

2.2.4.4拒绝策略

2.2.5框架

2.2.6工具类

2.2.7常见问题(整理自并发编程网)

并发常见问题

2.2.8 jvm常用命令

jps、jstack、jmap、jhat、jstat

2.3java.net

2.4javax.net.*

2.5java.nio.*

3.其它包使用

上一篇 下一篇

猜你喜欢

热点阅读