您的位置:首页 > 编程语言 > Java开发

张孝祥java.concurrent线程并发学习笔记 - concurrent简介

2016-05-05 14:58 567 查看
Java.util.concurrent并发库是JDK1.5新提供的,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,而当针对高质量Java多线程并发程序设计时,为防止死蹦等现象的出现,比如使用java之前的wait()、notify()和synchronized等,每每需要考虑性能、死锁、公平性、资源管理以及如何避免线程安全性方面带来的危害等诸多因素,往往会采用一些较为复杂的安全策略,加重了程序员的开发负担.万幸的是,在JDK1.5出现之后,Sun大神(Doug
Lea)终于为我们这些可怜的小程序员推出了java.util.concurrent工具包以简化并发完成。开发者们借助于此,将有效的减少竞争条件(race conditions)和死锁线程。concurrent包很好的解决了这些问题,为我们提供了更实用的并发程序模型。

java.util.concurrent包分成了三个部分,分别是java.util.concurrent、java.util.concurrent.atomic和java.util.concurrent.lock。内容涵盖了并发集合类、线程池机制、同步互斥机制、线程安全的变量更新工具类、锁等等常用工具。

java.util.concurrent包:

接口摘要
BlockingDeque<E>支持两个附加操作的
Queue
,这两个操作是:获取元素时等待双端队列变为非空;存储元素时等待双端队列中的空间变得可用。
BlockingQueue<E>支持两个附加操作的
Queue
,这两个操作是:获取元素时等待队列变为非空,以及存储元素时等待空间变得可用。
Callable<V>返回结果并且可能抛出异常的任务。
CompletionService<V>将生产新的异步任务与使用已完成任务的结果分离开来的服务。
ConcurrentMap<K,V>提供其他原子 putIfAbsent、remove、replace 方法的
Map
ConcurrentNavigableMap<K,V>支持
NavigableMap
操作,且以递归方式支持其可导航子映射的
ConcurrentMap
Delayed一种混合风格的接口,用来标记那些应该在给定延迟时间之后执行的对象。
Executor执行已提交的
Runnable
任务的对象。
ExecutorService
Executor
提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成
Future
的方法。
Future<V>Future 表示异步计算的结果。
RejectedExecutionHandler无法由
ThreadPoolExecutor
执行的任务的处理程序。
RunnableFuture<V>作为
Runnable
Future
RunnableScheduledFuture<V>作为
Runnable
ScheduledFuture
ScheduledExecutorService一个
ExecutorService
,可安排在给定的延迟后运行或定期执行的命令。
ScheduledFuture<V>一个延迟的、结果可接受的操作,可将其取消。
ThreadFactory根据需要创建新线程的对象。
类摘要
AbstractExecutorService提供
ExecutorService
执行方法的默认实现。
ArrayBlockingQueue<E>一个由数组支持的有界阻塞队列
ConcurrentHashMap<K,V>支持获取的完全并发和更新的所期望可调整并发的哈希表。
ConcurrentLinkedQueue<E>一个基于链接节点的无界线程安全队列
ConcurrentSkipListMap<K,V>可缩放的并发
ConcurrentNavigableMap
实现。
ConcurrentSkipListSet<E>一个基于
ConcurrentSkipListMap
的可缩放并发
NavigableSet
实现。
CopyOnWriteArrayList<E>
ArrayList
的一个线程安全的变体,其中所有可变操作(add、set 等等)都是通过对底层数组进行一次新的复制来实现的。
CopyOnWriteArraySet<E>对其所有操作使用内部
CopyOnWriteArrayList
Set
CountDownLatch一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
CyclicBarrier一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。
DelayQueue<E extends Delayed>Delayed 元素的一个无界阻塞队列,只有在延迟期满时才能从中提取元素。
Exchanger<V>可以在对中对元素进行配对和交换的线程的同步点。
ExecutorCompletionService<V>使用提供的
Executor
来执行任务的
CompletionService
Executors此包中所定义的
Executor
ExecutorService
ScheduledExecutorService
ThreadFactory
Callable
类的工厂和实用方法。
FutureTask<V>可取消的异步计算。
LinkedBlockingDeque<E>一个基于已链接节点的、任选范围的阻塞双端队列
LinkedBlockingQueue<E>一个基于已链接节点的、范围任意的 blocking queue
PriorityBlockingQueue<E>一个无界阻塞队列,它使用与类
PriorityQueue
相同的顺序规则,并且提供了阻塞获取操作。
ScheduledThreadPoolExecutor
ThreadPoolExecutor
,它可另行安排在给定的延迟后运行命令,或者定期执行命令。
Semaphore一个计数信号量。
SynchronousQueue<E>一种阻塞队列,其中每个插入操作必须等待另一个线程的对应移除操作 ,反之亦然。
ThreadPoolExecutor一个
ExecutorService
,它使用可能的几个池线程之一执行每个提交的任务,通常使用
Executors
工厂方法配置。
ThreadPoolExecutor.AbortPolicy用于被拒绝任务的处理程序,它将抛出 RejectedExecutionException.
ThreadPoolExecutor.CallerRunsPolicy用于被拒绝任务的处理程序,它直接在 execute 方法的调用线程中运行被拒绝的任务;如果执行程序已关闭,则会丢弃该任务。
ThreadPoolExecutor.DiscardOldestPolicy用于被拒绝任务的处理程序,它放弃最旧的未处理请求,然后重试execute;如果执行程序已关闭,则会丢弃该任务。
ThreadPoolExecutor.DiscardPolicy用于被拒绝任务的处理程序,默认情况下它将丢弃被拒绝的任务。
枚举摘要
TimeUnitTimeUnit 表示给定单元粒度的时间段,它提供在这些单元中进行跨单元转换和执行计时及延迟操作的实用工具方法。
java.util.concurrent.lock包:

接口摘要
Condition
Condition
Object
监视器方法(
wait
notify
notifyAll
)分解成截然不同的对象,以便通过将这些对象与任意
Lock
实现组合使用,为每个对象提供多个等待
set(wait-set)。
Lock
Lock
实现提供了比使用
synchronized
方法和语句可获得的更广泛的锁定操作。
ReadWriteLockReadWriteLock 维护了一对相关的
,一个用于只读操作,另一个用于写入操作。
类摘要
AbstractOwnableSynchronizer可以由线程以独占方式拥有的同步器。
AbstractQueuedLongSynchronizer以 long 形式维护同步状态的一个
AbstractQueuedSynchronizer
版本。
AbstractQueuedSynchronizer为实现依赖于先进先出 (FIFO) 等待队列的阻塞锁和相关同步器(信号量、事件,等等)提供一个框架。
LockSupport用来创建锁和其他同步类的基本线程阻塞原语。
ReentrantLock一个可重入的互斥锁
Lock
,它具有与使用
synchronized
方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。
ReentrantReadWriteLock支持与
ReentrantLock
类似语义的
ReadWriteLock
实现。
ReentrantReadWriteLock.ReadLock
ReentrantReadWriteLock.readLock()
方法返回的锁。
ReentrantReadWriteLock.WriteLock
ReentrantReadWriteLock.writeLock()
方法返回的锁。
java.util.concurrent.atomic包:

类摘要
AtomicBoolean可以用原子方式更新的
boolean
值。
AtomicInteger可以用原子方式更新的
int
值。
AtomicIntegerArray可以用原子方式更新其元素的
int
数组。
AtomicIntegerFieldUpdater<T>基于反射的实用工具,可以对指定类的指定
volatile int
字段进行原子更新。
AtomicLong可以用原子方式更新的
long
值。
AtomicLongArray可以用原子方式更新其元素的
long
数组。
AtomicLongFieldUpdater<T>基于反射的实用工具,可以对指定类的指定
volatile long
字段进行原子更新。
AtomicMarkableReference<V>
AtomicMarkableReference
维护带有标记位的对象引用,可以原子方式对其进行更新。
AtomicReference<V>可以用原子方式更新的对象引用。
AtomicReferenceArray<E>可以用原子方式更新其元素的对象引用数组。
AtomicReferenceFieldUpdater<T,V>基于反射的实用工具,可以对指定类的指定
volatile
字段进行原子更新。
AtomicStampedReference<V>
AtomicStampedReference
维护带有整数“标志”的对象引用,可以用原子方式对其进行更新。
以后章节将逐一讲解每一个类的使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: