3月25日 Java学习笔记
一、集合框架(续)
HashMap vs. ConcurrentHashMap
HashMap:
非线程安全,多线程环境下可能因扩容导致死循环(JDK1.8已优化)。
底层结构:数组 + 链表/红黑树(链表长度≥8时转红黑树)。
ConcurrentHashMap:
线程安全,采用分段锁(JDK1.7)或 CAS + synchronized(JDK1.8)。
读操作无锁,写操作仅锁定单个桶(Node节点)。
Fail-Fast vs. Fail-Safe
Fail-Fast:直接抛出ConcurrentModificationException(如ArrayList遍历时修改)。
Fail-Safe:遍历时基于原始集合的副本操作(如CopyOnWriteArrayList)。
二、多线程与并发
线程池参数
核心线程数(corePoolSize):常驻线程,即使空闲也不销毁。
最大线程数(maximumPoolSize):任务队列满时,允许创建的最大线程数。
存活时间(keepAliveTime):非核心线程的空闲存活时间。
任务队列(workQueue):
ArrayBlockingQueue:有界队列。
LinkedBlockingQueue:无界队列(默认Integer.MAX_VALUE)。
SynchronousQueue:直接传递任务,无缓冲。
volatile关键字
保证可见性:修改后立即同步到主内存。
禁止指令重排序(通过内存屏障)。
不保证原子性(如i++需配合synchronized或AtomicInteger)。
浙公网安备 33010602011771号