INDEX · JAVA

JAVA 源码分析索引

阅读方法:每篇都是一个完整代码块:真实 JDK 源码 + 只点关键设计和坑的注释。聚焦一个类,按下面顺序读,从数据结构到并发再到 JVM。

集合

一句话
Collection 接口集合框架顶层契约:查询/修改/批量三组方法,可选操作 + equals 驱动 + default 演进
ArrayList可变数组,1.5 倍扩容,尾增删摊还 O(1),fail-fast 迭代器
LinkedList双向链表,兼作 Deque,随机访问 O(n)
CopyOnWriteArrayList写时复制,读无锁写加锁,适合读多写少
HashMap数组+链表/红黑树,扰动函数,负载因子 0.75,树化阈值 8(含 JDK7 对照:头插法、并发扩容成环)
LinkedHashMapHashMap + 双向链表维护顺序,accessOrder 实现 LRU
TreeMap红黑树,按键有序,增删的左旋右旋与变色
ConcurrentHashMapCAS + synchronized 分段锁,size 用 CounterCell 分散
HashSetHashMap 的薄壳,全部委托 + PRESENT 哨兵;LinkedHashSet/TreeSet 同理
ArrayDeque环形数组双端队列,永远留一个空槽消歧空/满,栈与队列双料替代品
PriorityQueue数组小根堆,siftUp/siftDown 挪坑不交换,heapify 建堆 O(n)

基础与类型

一句话
String不可变,JDK9 后 byte[] + coder 压缩存储,常量池
StringBuilder可变字符序列,非线程安全,扩容翻倍+2;StringBuffer 加 synchronized
Integer装箱缓存池 -128~127,valueOf 复用
Objectequals/hashCode 契约,wait/notify 与 monitor

JUC 并发

一句话
AbstractQueuedSynchronizerAQS:state + CLH 队列,独占/共享模式的骨架
ReentrantLock基于 AQS 的可重入锁,公平/非公平
ReentrantReadWriteLock读写锁,state 位切分读/写计数,锁降级可行升级死锁
LockSupportpark/unpark 许可模型,AQS 阻塞原语,顺序无关不丢唤醒

同步器(AQS 共享模式)

一句话
CountDownLatch一次性倒计时,state 归零全部放行,共享模式
Semaphore许可信号量,state 是剩余许可数,控并发数
CyclicBarrier可循环栅栏,基于 ReentrantLock + Condition,凑齐一批一起走

原子与线程本地

一句话
AtomicIntegerCAS 无锁原子操作,Unsafe/VarHandle 底层
LongAdder分散热点计数:base 快路径 + Cell 数组,@Contended 防伪共享
ThreadLocal线程私有变量,ThreadLocalMap 弱引用 key 与内存泄漏

线程池与队列

一句话
ThreadPoolExecutor线程池:ctl 打包状态+线程数,四步入队策略
ScheduledThreadPoolExecutor定时线程池:小顶堆延迟队列 + leader-follower,fixedRate/fixedDelay 差一个负号
FutureTask异步任务:七态机 + CAS 发布结果,get 用 Treiber 栈等待
ArrayBlockingQueue数组有界阻塞队列,一把锁 + notEmpty/notFull 两个 Condition
LinkedBlockingQueue链表阻塞队列,take/put 两把锁 + 级联唤醒,默认无界是 OOM 坑

JVM 与运行时

一句话
Thread线程映射,6 态机,start vs run,interrupt 协作式中断
ClassLoader双亲委派,类唯一性 = 类名 + 加载器,打破委派的三场景
Class类的类,反射入口,类加载生命周期,getMethods vs getDeclaredMethods