Java并发包梳理
1.容器
接口:BlockingDeque(双端队列),BlockingQueue,ConcurrentMap,
ConcurrentNavigableMap:有序的map,可以按照key进行范围操作,获取正反序视图,获取子集等等。key按照Comparator或key的自然顺序(实现的Comparable接口)进行排序。
类:
ArrayBlockingQueue:以数组为基础的线程安全的有界队列,通过ReentrantLock实现线程安全
ConcurrentHashMap:1.8之前采用数据分段,对分段进行锁来实现(ReentrantLock+Segment数组+链表);
1.8后引入红黑树,采用cas实现线程安全(synchronized+CAS+数组+链表+红黑树)
ConcurrentLinkedDeque:双向链表结构的线程安全的无界双端队列(CAS)
ConcurrentLinkedQueue:链表结构的线程安全的无界队列(CAS)
ConcurrentSkipListMap:ConcurrentNavigableMap的实现,key有序的map。
ConcurrentSkipListSet:NavigableSet的实现,有序的Set。
CopyOnWriteArrayList:
CopyOnWriteArraySet:
2.锁
3.流程控制
接口:
Callable:相较于Runnable,Callable有结果返回,但要配套Future使用。
CompletionService:(外部将多个新任务投入CompletionService,CompletionService执行完后,会放入内部的一个blockingqueue,外部通过CompletionService的take接口获取执行后的结果,take获取到的任务按执行完成顺序排列)
CompletionStage:通过CompletionStage可以将一系列异步操作按顺序执行,下一步操作可以接收上一步的执行结果。CompletionFuture是现阶段唯一的实现类。
Delayed:标识一个延迟任务。
Future:代表一个异步操作的结果。
RunnableFuture:继承了Runnable和Future,能被扔到线程中当任务被执行,也能作为执行结果返回。
RunnableScheduledFutrue:一个可延迟的RunnbaleFuture。
ScheduledFuture:通常作为ScheduledExecutorService的执行结果。
4.线程池
接口:
Executor:接收并执行Runnable对象。
ExecutorService:Executor的子接口,在父接口基础上添加了管理接口。
RejectedExecutionHandler:用来处理ThreadPoolExecutor无法处理的任务。
ScheduledExecutorService:一个支持延迟和周期性执行任务的ExecutorService。
ThreadFactory:线程工厂。
类:
AbstractExecutorService