其它
原子操作
基本类型
- AtomicInteger
- AtomicLong
- AtomicBoolean
数组
- AtomicIntegerArray
- AtomicLongArray
- AtomicReferenceArray
引用类型
- AtomicReference
- AtomicReferenceFieldUpdater
其它
- threadlocal
- 对象为建,任意对象为值,结构被附带在线程上,一个线程可以根据一个threadlocal对象查询到绑定在这个线程上的值,类维护了一个以当前线程为key的键值对
- fork/join
- 用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架
- 工作窃取算法
- forkJoinPool
- forkjointask数组
- forkjoinworkerThread数组
- 用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架
并发集合
ConcurrentHashMap
- 其中抛弃了原有的 Segment 分段锁,而采用了 CAS + synchronized 来保证并发安全性。
LinkedBlockingQueue
- ReentrantLock lock
concurrentLinkedQueue
- 基于链接节点的无界线程安全队列
- offer
- 将指定元素插入此队列的尾部。
- poll
- 获取并移除此队列的头,如果此队列为空,则返回 null。
- peek
- 获取但不移除
- offer
线程池
Executor
- 示意图
- 子主题 1
- 组成
- ThreadPoolExcutor
ThreadPoolExecutor
- 类型
- fixedThreadPool
- singleThreadPoolExcute
- cacheThreadPOOL
- corePool
- 核心线程池大小
- maximumPool
- 最大线程池大小
- BlockingQueue
- 暂时保存任务的工作队列
- RejectedExecutionHandler
- 线程池饱和时,execute调用方法
- excute
Future Callable
ScheduledExecutorService
线程池架构
- 子主题 1
- 子主题 1
- 如果线程池中的线程数量少于corePoolSize,就创建新的线程来执行新添加的任务
- 如果线程池中的线程数量大于等于corePoolSize,但队列workQueue未满,则将新添加的任务放到workQueue中
- 如果线程池中的线程数量大于等于corePoolSize,且队列workQueue已满,但线程池中的线程数量小于maximumPoolSize,则会创建新的线程来处理被添加的任务
- 如果线程池中的线程数量等于了maximumPoolSize,就用RejectedExecutionHandler来执行拒绝策略
- 子主题 1
工具类
CyclicBarrier
- 一组线程到达一个屏障被阻塞,与countdown相比,可以重置
CountDownLatch
- 一个或者多个线程等待其它线程完成操作
Semaphore
- 控制访问特定资源的线程数量
exchanger
- 进行线程间的数据交换
减少上下文切换
无锁并发编程
CAS
使用较少线程
使用协程
- 英文Coroutines,是一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。最重要的是,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。
XMind: ZEN - Trial Version