并发API
2021-10-01 22:44:40 0 举报
AI智能生成
并发API描述
作者其他创作
大纲/内容
Executors
Executors:工厂类,用于生成线程池方法
java.util.concurrent.Executors#newFixedThreadPool(int):创建一个固定线程大小的线程池
java.util.concurrent.Executors#newSingleThreadExecutor():创建一个只有一个线程的线程池
java.util.concurrent.Executors#newCachedThreadPool():创建一个根据需要创建线程的线程池
java.util.concurrent.Executors#newScheduledThreadPool(int):核心线程池固定,大小无限的线程池。此线程池支持定时以及周期性执行任务的需求。
Executor:接口,仅有一个方法为execute(Runnable)
ExecutorService:Executor的子接口,扩展了Executor的方法,如submit/shutdown等。
ScheduledExecutorService:ExecutorService的子接口,提供定时调度功能,如schedule方法
AbstractExecutorService:抽象类,ExecutorService的子类,提供ExecutorService执行方法的默认实现。此类使用newTaskFor返回的
ThreadPoolExecutor:线程池核心类,继承了AbstractExecutorService,自定义线程池会用到,Executors中创建的线程池均为该类对象
ScheduledThreadPoolExecutor:ThreadPoolExecutor的子类,使用schedule方法设置定时调度,该方法的返回参数为ScheduledFuture
Callable:接口,可以执行返回一个结果的任务(线程),仅有call方法。
Future:接口,主要方法为get,阻塞的方法
FutureTask:类,实现了Future,可取消的异步计算,此类提供了对 Future 的基本实现.
ScheduledFuture:Future的子接口,接收ScheduledExecutorService执行的结果,该接口中没有添加新方法。
Delayed :接口,用来标记那些应该在给定延迟时间之后执行的对象,主要方法为getDelay
CompletionService:接口,将生产新的异步任务与使用已完成任务的结果分离开来的服务。生产者submit执行的任务。 使用者take已完成的任务,并按照完成这些任务的顺序处理它们的结果。
ExecutorCompletionService<V>:CompletionService实现类
Queues
BolckingQueue:接口,Queue的子接口,支持两个附加操作的Queue,这两个操作是:获取元素时等待队列变为非空(take方法),以及存储元素时等待空间变得可用(put方法)。
LinkedBlockingQueue:类,BlockingQueue的链表实现,一般用来实现无界队列。
ArrayBlockingQueue:类,BlockingQueue的数组实现,一般用来实现有界队列。
SynchronousQueue:类,BlockingQueue的实现,一般用来实现任务即时提交。
PriorityBlockingQueue:类,BlockingQueue的实现,一个无界阻塞队列,它使用与类PriorityQueue相同的顺序规则,并且提供了阻塞获取操作。
DelayQueue:类,BlockingQueue的实现,Delayed元素的一个无界阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部是延迟期满后保存时间最长的 Delayed元素。如果延迟都还没有期满,则队列没有头部,并且poll将返回null。当一个元素的getDelay(TimeUnit.NANOSECONDS)方法返回一个小于等于0的值时,将发生到期。即使无法使用take或poll移除未到期的元素,也不会将这些元素作为正常元素对待。
java.util.AbstractQueue:提供Queue接口的基本实现
ConcurrentLinkedQueue:java.util.AbstractQueue的子类,一个基于链接节点的无界线程安全队列。此队列按照 FIFO(先进先出)原则对元素进行排序,此实现采用了有效的“无等待 (wait-free)”算法
Concurrent Collections
ConcurrentMap:接口,java.util.Map的子接口,提供其他原子putIfAbsent、remove、replace方法的Map。
ConcurrentHashMap:类,支持获取的完全并发和更新的所期望可调整并发的哈希表。此类遵守与Hashtable相同的功能规范,并且包括对应于Hashtable的每个方法的方法版本。使用分段锁来进行线程访问控制,单线程环境下只损失非常小的性能。
CopyOnWriteArrayList:类,实现了List接口,ArrayList的一个线程安全的变体,其中所有可变操作(add、set 等等)都是通过对底层数组进行一次新的复制来实现的。这一般需要很大的开销,但是当遍历操作的数量大大超过可变操作的数量时,这种方法可能比其他替代方法更 有效。
CopyOnWriteArraySet:类,实现了Set接口,对其所有操作使用内部CopyOnWriteArrayList的Set。
Synchronizers
Synchronizers
CountDownLatch:一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数初始化CountDownLatch。由于调用了countDown()方法,所以在当前计数到达零之前,await方法会一直受阻塞。之后,会释放所有等待的线程,await的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。如果需要重置计数,请考虑使用 CyclicBarrier。
Semaphore:类,一个计数信号量。acquire()获取许可,release()释放获得的许可。若线程未获得许可,会一直阻塞。
Exchanger:类,可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给exchange方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象。应用较少。
CyclicBarrier:CyclicBarrier类似于CountDownLatch也是个计数器,不同的是CyclicBarrier数的是调用了CyclicBarrier.await()进入等待的线程数, 当线程数达到了CyclicBarrier初始时规定的数目时,所有进入等待状态的线程被唤醒并继续。CyclicBarrier初始时还可带一个Runnable的参数 此Runnable任务在CyclicBarrier的数目达到后,在所有其它线程被唤醒前被执行。
java.util.concurrent.lock包
Lock:接口,Lock实现提供了比使用synchronized方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的Condition对象。
Condition:Condition将Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意Lock实现组合使用,为每个对象提供多个等待set(wait-set)。其中,Lock替代了synchronized方法和语句的使用,Condition替代了Object监视器方法的使用。不同于其他线程,使用此类时,等待与唤醒不再使用wait与notity方法,而是使用await()与signal()。
ReentrantLock:类,Lock的实现,一个可重入的互斥锁Lock,此类的构造方法接受一个可选的公平 参数。
ReadWriteLock:口,ReadWriteLock维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有writer,读取锁可以由多个reader线程同时保持。写入锁是独占的。
ReentrantReadWriteLock:类,ReadWriteLock的实现,此类不会将读取者优先或写入者优先强加给锁访问的排序。但是支持可选的公平策略。
AbstractQueuedSynchronizer:抽象类,为实现依赖于先进先出 (FIFO) 等待队列的阻塞锁和相关同步器(信号量、事件,等等)提供一个框架。
LockSupport:类,用来创建锁和其他同步类的基本线程阻塞原语。park和unpark方法提供了阻塞和解除阻塞线程的有效方法
java.util.concurrent.atomic包
java.util.concurrent.atomic包
AtomicBoolean:Boolean的原子类
AtomicInteger:Integer的原子类,java.lang.Number的子类
AtomicIntegerArray:可以用原子方式更新其元素的int数组
AtomicIntegerFieldUpdater:基于反射的实用工具,可以对指定类的指定volatile int字段进行原子更新。
AtomicLong:Long的原子类,java.lang.Number的子类
AtomicLongArray:可以用原子方式更新其元素的 long 数组。
AtomicLongFieldUpdater:基于反射的实用工具,可以对指定类的指定 volatile long 字段进行原子更新。
AtomicMarkableReference:维护带有标记位的对象引用,可以原子方式对其进行更新。
AtomicReference:可以用原子方式更新的对象引用。
AtomicReferenceArray:可以用原子方式更新其元素的对象引用数组。
AtomicReferenceFieldUpdater:基于反射的实用工具,可以对指定类的指定 volatile 字段进行原子更新。
并发是指在一个时间段内有多个进程在执行。
高并发(High Concurrency)是使用技术手段使系统可以并行处理很多请求。
0 条评论
下一页