java并发包JUC简介
所属分类 java
浏览量 1373
java.util.concurrent JUC
集合
ConcurrentHashMap
ConcurrentSkipListMap
基于跳跃表,key 自然排序,key 不能为 null,类似 TreeMap
volatile+CAS
ConcurrentSkipListSet 基于 ConcurrentSkipListMap 实现
CopyOnWriteArrayList
基于数组实现 数组初始长度为0
写时复制 CopyOnWrite COW
private transient volatile Object[] array;
public boolean add(E e) {
// 更新加锁
final ReentrantLock lock = this.lock;
lock.lock();
try {
Object[] elements = getArray();
int len = elements.length;
// 拷贝新数组,长度+1
Object[] newElements = Arrays.copyOf(elements, len + 1);
newElements[len] = e;
// volatile 数组替换
setArray(newElements);
return true;
} finally {
lock.unlock();
}
}
CopyOnWriteArraySet
基于 CopyOnWriteArrayList 实现 ,去重,按照插入顺序排序
非阻塞队列
ConcurrentLinkedQueue
基于链表 无界的线程安全的非阻塞队列 ,FIFO volatile+CAS
private static class Node {
volatile E item;
volatile Node next;
}
private transient volatile Node head;
private transient volatile Node tail;
private boolean casTail(Node cmp, Node val) {
return UNSAFE.compareAndSwapObject(this, tailOffset, cmp, val);
}
private boolean casHead(Node cmp, Node val) {
return UNSAFE.compareAndSwapObject(this, headOffset, cmp, val);
}
ConcurrentLinkedDeque
双向链表 实现与 ConcurrentLinkedQueue 类似
static final class Node {
volatile Node prev;
volatile E item;
volatile Node next;
}
阻塞队列
ReentrantLock Condition 通知等待
ArrayBlockingQueue
LinkedBlockingQueue
PriorityBlockingQueue
优先队列 基于二叉小顶堆 保证取出的元素是最小的,默认初始容量11
DelayQueue
基于数组实现 延迟阻塞队列
Delayed 接口
public interface Delayed extends Comparable {
long getDelay(TimeUnit unit);
}
原子类
AtomicInteger
AtomicLong
AtomicReference
并发工具类
CountDownLatch
CyclicBarrier
支持 reset() 重置状态
ReentrantLock Condition
线程池
ThreadPoolExecutor
核心参数
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
核心线程数
最大线程数
线程空闲时间
线程空闲时间单位
任务队列
线程工厂 定制线程名 方便排查问题
决绝策略
CallerRunsPolicy
AbortPolicy
DiscardPolicy
DiscardOldestPolicy
基于 ReentrantLock Condition await signalAll 实现简单的阻塞队列
基于 wait 和 notifyAll 实现简单的阻塞队列
ReentrantLock原理
LockSupport简介
java线程状态及转换
Lock和synchronized的区别
java并发机制的底层实现原理
ArrayBlockingQueue和LinkedBlockingQueue的区别
ConcurrentHashMap在jdk7和8中的区别
并发机制的底层实现原理摘要
AQS同步队列与条件队列
公平锁与非公平锁的关键区别
java8 ConcurrentHashMap 锁机制
线程池要点
java线程池实例
java线程池shutdown和shutdownNow的区别
ThreadPoolExecutor中的ctl变量
tomcat线程池要点
Java线程池ExecutorService与CompletionService
Timer和ScheduledExecutorService的区别
Java锁机制
threadlocal实例及原理
LongAdder vs AtomicLong
CountDownLatch 与 CyclicBarrier
ConcurrentHashMap读操作为什么不需要加锁
ThreadLocal 与 SimpleDateFormat
java关键字volatile原理
延迟队列原理及使用场景
java中的队列介绍
AQS要点整理
The java.util.concurrent Synchronizer Framework 翻译
上一篇
下一篇
feign消费端注解使用说明
JVM异常优化Fast Throw 与 OmitStackTraceInFastThrow 参数
arthas实战之生产环境空指针排查
身材就是你的名片
SpringBoot的指标数据
cron表达式实例