线程并发包util.concurrent的研究(一)
1.简介:
编写调度和并发基础结构类的确要比看上去难。Java 语言提供了一组有用的低级同步原语:
这个包的结构是按照以下层次构架的:Atomic->Sync->Channel->Executor。
Atomic:实现了针对各种对象的原子操作CAS(compareAndSwtich)。
Sync:基于Atomic实现了线程同步的各种锁定机制-互斥锁、信号灯等。
Channel:使用Sync提供的锁机制实现了各种任务队列-阻塞队列、链表队列、优先级队列等。
Executor:提供了多种线程管理方式-线程池等。这些管理方式是基于Channel所提供的任务队列来实现。
4. Executor与其它类的关系图:
![]()
在后面的章节中将详细介绍每个部分。
1.简介:
编写调度和并发基础结构类的确要比看上去难。Java 语言提供了一组有用的低级同步原语:
wait()
、 notify()
和 synchronized
,但具体使用这些原语需要一些技巧,需要考虑性能、死锁、公平性、资源管理以及如何避免线程安全性方面带来的危害等诸多因素。并发代码难以编写,更难以测试 — 即使专家有时在第一次时也会出现错误。Concurrent Programming in Java(请参阅
参考资料
)的作者 Doug Lea 编写了一个极其优秀的、免费的并发实用程序包,它包括并发应用程序的锁、互斥、队列、线程池、轻量级任务、有效的并发集合、原子的算术操作和其它基本构件。人们一般称这个包为 util.concurrent
(因为它实际的包名很长),该包将形成 Java Community Process JSR 166 正在标准化的 JDK 1.5 中 java.util.concurrent
包的基础。同时,util.concurrent
经过了良好的测试,许多服务器应用程序(包括 JBoss J2EE 应用程序服务器)都使用这个包。
2.设计目标:
翻译自http://gee.cs.oswego.edu/dl/cpjslides/util.pdf
1). 提供一些简单易用的借口:虽然覆盖面达到了大多数程序员的要求,但是有时还需要自己写一些代码。
2). 高质量的实现:正确、传统、有效、可移植。
3). 为未来标准化提供基础:获得经验并收集反馈。
3.结构:
类接口+附有子类的实现设计大体分为三大部分:Sync,Channel,Executor。
这个包的结构是按照以下层次构架的:Atomic->Sync->Channel->Executor。
Atomic:实现了针对各种对象的原子操作CAS(compareAndSwtich)。
Sync:基于Atomic实现了线程同步的各种锁定机制-互斥锁、信号灯等。
Channel:使用Sync提供的锁机制实现了各种任务队列-阻塞队列、链表队列、优先级队列等。
Executor:提供了多种线程管理方式-线程池等。这些管理方式是基于Channel所提供的任务队列来实现。
4. Executor与其它类的关系图:
在后面的章节中将详细介绍每个部分。