Java并发编程实战 第5章 基础构建模块

委托是创建线程安全类的一个最有效的策略:只需让现有的线程安全类管理所有的状态即可。

5.1 同步容器类

如果不希望在迭代期间对容器加锁,那么一种替代方案就是克隆容器,并在副本上进行迭代。由于副本被封闭在线程内,因此其他线程不会在迭代期间对其修改。
容器的toString、hashCode、equals方法都隐含了迭代操作

5.2 并发容器

同步容器将对容器状态的访问都串行化,以实现线程安全性,这会严重降低并发性,吞吐量降低。

5.2.1 ConcurrentHashMap

并发下实现更高的吞吐量,单线程环境中损失较小的性能。

5.2.3 CopyOnWriteArrayList

写入时复制
每次修改时,都会创建并重新发布一个新的容器副本。修改时会复制底层数组,开销较大。适用于仅当迭代操作远远多于修改操作时。

5.3 阻塞队列和生产者-消费者模式

在构建高可靠的应用程序时,有界队列是一种强大的资源管理工具:它们能抑制并防止产生过多的工作项,使应用程序在负荷过载的情况下变得更加健壮。
BlockingQueue实现:
1、FIFO:LinkedBlockingQueue,ArrayBlockingQueue
2、优先级:PriorityBlockingQueue,可以实现对象的comparable方法,也可以使用Comparator比较器。
3、同步队列,SynchronousQueue,没有维护存储空间,维护一组线程。put和take会一直阻塞,直到有另一个线程已经准备好参与到交付过程。适用有足够多的消费者,并且总是有一个消费者准备获取交付的工作。

5.3.2 串行线程封闭

同步机制保证对象从生产者线程安全的发布到消费者线程。

5.3.3 双端队列与工作密取

一个消费者完成了自己双端队列中的工作,那么take已从其他消费者双端队列的末尾秘密地获取工作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章