首页  

java并发包JUC简介     所属分类 java 浏览量 1217
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<E> { volatile E item; volatile Node<E> next; } private transient volatile Node<E> head; private transient volatile Node<E> tail; private boolean casTail(Node<E> cmp, Node<E> val) { return UNSAFE.compareAndSwapObject(this, tailOffset, cmp, val); } private boolean casHead(Node<E> cmp, Node<E> val) { return UNSAFE.compareAndSwapObject(this, headOffset, cmp, val); } ConcurrentLinkedDeque 双向链表 实现与 ConcurrentLinkedQueue 类似 static final class Node<E> { volatile Node<E> prev; volatile E item; volatile Node<E> next; }
阻塞队列 ReentrantLock Condition 通知等待 ArrayBlockingQueue LinkedBlockingQueue PriorityBlockingQueue 优先队列 基于二叉小顶堆 保证取出的元素是最小的,默认初始容量11 DelayQueue 基于数组实现 延迟阻塞队列 Delayed 接口 public interface Delayed extends Comparable<Delayed> { long getDelay(TimeUnit unit); }
原子类 AtomicInteger AtomicLong AtomicReference
并发工具类 CountDownLatch CyclicBarrier 支持 reset() 重置状态 ReentrantLock Condition
线程池 ThreadPoolExecutor 核心参数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> 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表达式实例