Java提供了三个并发编程功能包,它们是:
- java.util.concurent
- java.util.concurent.locks
- java.util.concurent.atomic
本文意在厘清这三个包的概念结构,关于具体功能的实现,将另文详记。
1. Overview
java.util.concurent/locks/atomic三个包主要提供了以下三块功能:
功能 | 涉及包 |
一组线程安全数据结构 | concurrent+atomic |
一组比synchronized关键子功能更丰富的同步工具 | concurrent+locks |
一套线程池实现框架 | concurrent |
本文接下来,按照功能整理这些包的逻辑结构。
2 线程安全的数据结构
2.1 java.util.concurent.atomic包
首先,java.util.concurent.atomic包的所有类,都是用于提供一组不需要进行线程同步,可以安全的进行并发操作的变量类,罗列如下:
- AtomicBoolean
- AtomicInteger
- AtomicIntegerArray
- AtomicIntegerFieldUpdater
- AtomicLong
- AtomicLongArray
- AtomicLongFieldUpdater
- AtomicMarkableReference
- AtomicReference
- AtomicReferenceArray
- AtomicReferenceFieldUpdater
- AtomicStampedReference
- DoubleAccumulator
- DoubleAdder
- LongAccumulator
- LongAdder
2.2 java.util.concurent提供的复杂线程安全数据结构
在java.util.concurent.atomic包的基础上,java.util.concurent包实现了一组复杂的线程安全数据结构。可以分为以下几个小组:
java.util.AbstractQueue的子类:
java.util.AbstractQueue<E> (implements java.util.Queue<E>)
java.util.concurrent.ArrayBlockingQueue<E>
java.util.concurrent.ConcurrentLinkedQueue<E>
java.util.concurrent.DelayQueue<E>
java.util.concurrent.LinkedBlockingDeque<E>
java.util.concurrent.LinkedBlockingQueue<E>
java.util.concurrent.LinkedTransferQueue<E>
java.util.concurrent.PriorityBlockingQueue<E>
java.util.concurrent.SynchronousQueue<E>
java.util.AbstractSet的子类:
java.util.AbstractSet<E>
java.util.concurrent.ConcurrentSkipListSet<E>
java.util.concurrent.CopyOnWriteArraySet<E>
java.util.AbstractCollection的子类:
java.util.AbstractCollection<E>
java.util.concurrent.ConcurrentLinkedDeque<E>
java.util.concurrent.ConcurrentHashMap.KeySetView<K,V>
java.util.concurrent.CopyOnWriteArrayList<E>
java.util.AbstractMap的子类:
java.util.AbstractMap<K,V>
java.util.concurrent.ConcurrentHashMap<K,V>
java.util.concurrent.ConcurrentSkipListMap<K,V>
3 功能丰富的同步工具
3.1 Overview
3.2 java.util.concurrent.locks包
3.1.1 Synchronizer
java.util.concurrent.locks包中最核心类是AbstractQueuedSynchronizer,它定义了实现线程安全数据结构的最基本的操作,主要是以下几类:
- acquire
- release
- compareAndSetState
- waitting queue操作
AbstractOwnableSynchronizer是其父类,只定义了两个waitting queue操作:getExclusiveOwnerThread()和setExclusiveOwnerThread。
AbstractQueuedLongSynchronizer是AbstractQueuedSynchronizer的兄弟类,与AbstractQueuedSynchronizer的唯一区别在于其状态用long型数据表示。
这三个Synchronizer的底层实现不是依赖synchronized的,而是依赖
Unsafe。
3.1.2 Lock
在Synchronizer的基础上,java.util.concurrent.locks包实现了锁的概念,包括Lock接口的实现类和ReadWriteLock接口的实现类。
3.1.3 LockSupport
LockSupport提供了并发编程中的park语义,它替代了已经deprecated的Thread.suspend()/resume()。具体原因:
Java Thread Primitive Deprecation
3.3 功能更强大的同步工具
在java.util.concurrent.locks包的基础上,java.util.concurrent实现了一些列功能更为复杂的同步工具类:
- java.util.concurrent.CountDownLatch
- java.util.concurrent.CyclicBarrier
- java.util.concurrent.Exchanger<V>
- java.util.concurrent.Semaphore
- java.util.concurrent.Phaser
4 线程池框架
4.1 ExecutorService
线程池的主体功能有两种实现,第一种由实现ExecutorService接口的一系列类来实现:
java.util.concurrent.AbstractExecutorService
java.util.concurrent.ForkJoinPool
java.util.concurrent.ThreadPoolExecutor
java.util.concurrent.ScheduledThreadPoolExecutor
一个使用Executor Serivce是简单例子如下所示:
ExecutorService executorService = Executors.newFixedThreadPool(10);
executorService.execute(new Runnable()
{
public void run()
{
System.out.println("Asynchronous task");
}
});
executorService.shutdown();
第二种由实现CompletionService接口的类实现,这样的类只有一个:java.util.concurrent.ExecutorCompletionService。A service that decouples the production of new asynchronous tasks from the consumption of the results of completed tasks. Producers submit tasks for execution. Consumers take completed tasks and process their results in the order they complete.
4.2 Future
一系列实现Future接口的类实现了异步编程中的
Promise语义:
java.util.concurrent.CompletableFuture<T>
java.util.concurrent.ForkJoinTask<V>
java.util.concurrent.CountedCompleter<T>
java.util.concurrent.RecursiveAction
java.util.concurrent.RecursiveTask<V>
java.util.concurrent.FutureTask<V>
调用可能有较长时间阻塞/等待的方法时,可以先返回一个轻量级的Future对象,方法执行的真正结果可以通过调用Future.get()获取。
5 其他相关类的说明
- java.util.concurrent.Executors:Executor, ExecutorService, ScheduledExecutorService, ThreadFactory,Callable 等的工厂/工具类。
- java.util.concurrent.ThreadLocalRandom:java.util.Random类的子类,A random number generator isolated to the current thread.
- java.util.concurrent.ForkJoinWorkerThread:专门用于执行 ForkJoinTasks的Thread子类
分享到:
相关推荐
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
java并发工具包 java.util.concurrent中文版-带书签版
java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
java并发工具包 java.util.concurrent中文版pdf
包含3个jar(修改后的javaee.jar可以接覆盖原jar,和mail.jar和activition.jar)和一个文档,测试通过。 JavaMail的java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream错误 原因: MyEclipse...
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
Java 并发工具包 java.util.concurrent 用户指南 中英文对照阅读版 pdf
Java并发编程工具包java.util.concurrent的UML类结构图 PDF
本文通过对数据压缩算法的简要介绍,然后以详细的示例演示了利用java.util.zip包实现数据的压缩与解压,并扩展到在网络传输方面如何应用java.util.zip包现数据压缩与解压
java.util.ConcurrentModificationException 异常问题详解1
java API 在包java.util中有一个GregorianCalendar类,使用它可以得到一年内某个月的日历.zip
详细介绍了java.util.logging.Logger的用法和结构,对如果扩展Logger起到抛砖引玉的作用!尊重劳动成果,亲下载了要给个评价!
Tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError),内附解决方案!
打到org/eclipse/ui/internal/util/SWTResourceUtil.class 用winrar打开,同时也打开3.4的org.eclipse.ui.workbench_3.4.0.I20080606-1300.jar 到org/eclipse/ui/internal/util目录下 把SWTResourceUtil.class ...
Exception in thread “main“ java.util.InputMismatchException
java.util包
import java.util.Iterator; import java.util.List; import java.util.regex.*; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; //import org.dom4j.io.OutputFormat; ...
java.util.Date与java.sql.Date互转及字符串转换为日期时间格式.docx
java.util.concurrent系列文章(1) java.util.concurrent系列文章(1) java.util.concurrent系列文章(1) java.util.concurrent系列文章(1)
java.util.concurrent总体概览图。 收取资源分3分。...java.util.concurrent主要包括5个部分executor,colletions,locks,atomic,tools。 该图详细的列举了并发包下面的结构,包含所有接口和具体实现类。