JDK1.8并发包
2020-09-09 22:33:33 0 举报
AI智能生成
JDK1.8并发工具包
作者其他创作
大纲/内容
锁
Lock<br>显式锁定义顶层接口<br>
ReentrantLock<br>可重入锁<br>
ReadWriteLock<br>读写锁接口<br>
ReentrantReadWriteLock<br>可重入读写锁<br>
StampedLock<br>解决读写锁的写饥饿问题,支持写锁、悲观读锁和乐观读,乐观读是无所得允许一个线程获取写锁<br>
Condition<br>通过 Lock.newCondition 获取,完成等待与唤醒<br>
LockSupport<br>线程阻塞工具类<br>
AbstractOwnableSynchronizer<br>设置和获取独占锁的拥有者线程,供子类使用<br>
AbstractQueuedSynchronizer<br>大名鼎鼎的 AQS,自定义同步器框架,ReentrantLock、ReentrantReadWriteLock 等都是基于此实现<br>
AbstractQueuedLongSynchronizer<br>AOS 的子类,state 为 long,支持 64 位,其他与 AQS 无区别<br>
可并发的数据结构<br>
Collection<br>集合接口<br>
Queue<br>队列接口<br>
ConcurrentLinkedQueue<br>基于单向链表实现的并发队列<br>
BlockingQueue<br>阻塞队列接口<br>
ArrayBlockingQueue<br>基于数组实现的阻塞队列,支持有界<br>
LinkedBlockingQueue<br>基于单向链表实现的阻塞队列,支持有界<br>
DelayQueue<br>无界阻塞延迟队列<br>
PriorityBlockingQueue<br>支持优先级的无界阻塞队列<br>
SynchronousQueue<br>直接将元素交给等待中的消费者,无等待的消费者,插入元素阻塞,无容量<br>
TransferQueue<br>BlockingQueue 和 SynchronousQueue 的整合,可以在队列阻塞,也可以阻塞在等待消费者<br>
LinkedTransferQueue<br>ConcurrentLinkedQueue、SynchronousQueue(公平模式)和LinkedBlockingQueue 的 超集,性能更高
Deque<br>双端队列接口<br>
BlockingDeque<br>阻塞双端队列接口<br>
ConcurrentLinkedDeque<br>基于双向链表的无界并发双端队列<br>
List<br>有序集合接口<br>
CopyOnWriteArrayList<br>基于数组写入时可并发有序集合<br>
Set<br>元素不重复集合接口<br>
CopyOnWriteArraySet<br>基于数组写入时可并发元素不重复集合<br>
ConcurrentSkipListSet<br>基于 ConcurrentSkipListMap 实现的可并发元素不重复集合<br>
Map<br>键值对集合接口<br>
ConcurrentMap<br>可并发的键值对集合接口<br>
ConcurrentHashMap<br>基于 hash 与分段锁,可并发的键值对集合<br>
ConcurrentNavigableMap<br>可搜索导航的并发键值对集合接口<br>
ConcurrentSkipListMap<br>基于跳表实现的可搜索导航的并发键值对集合<br>
异常<br>
TimeoutException<br>阻塞操作超时异常<br>
CompletionException<br>完成结果或任务过程引发的异常<br>
BrokenBarrierException<br>线程试图等待处于中断状态的屏障 或 线程等待时进入中断状态,抛出的异常<br>
CancellationException<br>获取值的任务被 cancel 异常<br>
ExecutionException<br>获取任务结果,引发的异常,会造成任务中止<br>
原子类
AtomicBoolean<br>可原子更新的 Boolean<br>
AtomicInteger<br>可原子更新的 Integer
AtomicIntegerArray<br>可原子更新元素的 int 数组
AtomicIntegerFieldUpdater<br>基于反射可原子更新类中的 Integer 成员属性
AtomicLong<br>可原子更新的 Long
AtomicLongArray<br>可原子更新元素的 long 数组
AtomicLongFieldUpdater<br>基于反射可原子更新类中的 Long 成员属性
AtomicMarkableReference<br>带 boolean 标记可原子更新对象,多了 boolean 类型的 mark,可解决 ABA 问题
AtomicReference<br>可原子更新对象
AtomicReferenceArray<br>可原子更新对象数组元素
AtomicReferenceFieldUpdater<br>基于反射可原子更新类中的成员属性对象
AtomicStampedReference<br>带有版本戳可原子更新对象,基于 int 版本戳,可以解决 ABA 问题
DoubleAccumulator<br>DoubleAdder 的增强版,支持定义计算函数
DoubleAdder<br>Double 累加器,中途 sum 可能存在误差,保证结果最终一致,高并发下用 cell 数组把线程分组计算更新
LongAccumulator<br>LongAdder 的增强版,支持定义计算函数<br>
LongAdder<br>Long 累加器,中途 sum 可能存在误差,保证结果最终一致,高并发下用 cell 数组把线程分组计算更新,高并发下性能比 AtomicLong 好,但空间复杂度高<br>
Striped64<br>LongAdder、LongAccumulator、DoubleAdder、DoubleAccumulator 通过 cell 数组把线程分组计算更新的底层实现<br>
线程池<br>
Executor<br>线程池顶层接口,提交可运行任务<br>
ExecutorService<br>提供停止线程池、提交带结果的任务等方法的线程池接口<br>
AbstractExecutorService<br>ExecutorService 的默认实现<br>
ForkJoinPool<br>支持任务窃取与拆分的线程池<br>
ThreadPoolExecutor<br>线程池的实现类,可通过构造方法与不同参数创建自己想要的线程池<br>
ScheduledExecutorService<br>可延迟或周期执行任务的线程池接口<br>
ScheduledThreadPoolExecutor<br>可延迟或周期执行任务的线程池,也是 ThreadPoolExecutor 的子类<br>
Executors<br>各种线程池的创建、任务类型的转换等功能的工具类<br>
Callable<br>带返回结果的任务的接口<br>
Future<br>表示异步计算结果的接口,检查计算是否完成,等待计算完成,等待获取结果<br>
ForkJoinTask<br>ForkJoinPool 的任务,比线程更轻量<br>
CountedCompleter<br>在触发完成动作时,检查有没有挂起动作,若没有则执行一个完成动作<br>
RecursiveAction<br>在 ForkJoinPool 任务拆分递归中,无结果的 ForkJoinTask,始终返回 null<br>
RecursiveTask<br>在 ForkJoinPool 任务拆分递归中,有结果的 ForkJoinTask<br>
RunnableFuture<br>Runnable、Future 的子接口<br>
FutureTask<br>一种可取消的异步计算任务,同时支持阻塞获取任务结果<br>
ScheduledFuture<br>可延迟、取消的 Future 的接口<br>
RunnableScheduledFuture<br>RunnableFuture、ScheduledFuture 的子接口<br>
CompletionService<br>异步任务执行完成有序化接口<br>
ExecutorCompletionService<br>CompletionService 的实现,线程池 Executor 和阻塞队列 BlockingQueue 的功能融合,让异步任务有序化,先执行完成的先进入阻塞队列<br>
CompletionStage<br>接口定义了线程完成阶段可以采用的不同执行方式,如异步,合并等<br>
CompletableFuture<br>计算完成,可设置值与状态、支持触发依赖函数和依赖操作,也是 Future 的子类<br>
RejectedExecutionHandler<br>线程池拒绝策略接口<br>
AbortPolicy<br>拒绝任务,抛出异常策略<br>
子主题
CallerRunsPolicy<br>提交任务的线程直接运行拒绝的任务的策略<br>
DiscardOldestPolicy<br>丢弃最早的任务,提交新任务策略<br>
DiscardPolicy<br>直接丢掉被拒绝的任务<br>
ThreadFactory<br>线程工厂接口,用于线程池创建线程<br>
ForkJoinWorkerThread<br>被 ForkJoinPool 管理,执行 ForkJoinTask 任务的线程<br>
TimeUnit <br>时间单位枚举<br>
delay<br>标记 delay 的接口<br>
工具
Semaphore<br>信号量,与锁最大的不同在于,允许多个线程访问一个临界区<br>
CyclicBarrier<br>循环栅栏,可循环利用的屏障,允许一组线程全部等待对方到达一个公共屏障点再一起执行<br>
CountDownLatch<br>一个或多个线程等待其他线程的操作完成<br>
Exchanger<br>两个工作线程在交换点交换数据的工具类<br>
ThreadLocalRandom<br>本地线程的生成随机数工具类<br>
Phaser<br>可重用的同步屏障,比 CyclicBarrier、CountDownLatch 灵活<br>
0 条评论
下一页