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)。

posted @ 2025-03-25 23:41  头发少的文不识  阅读(15)  评论(0)    收藏  举报