java并发编程实战-基础构建模块2
来源:互联网 发布:iphone7下载不了淘宝 编辑:程序博客网 时间:2024/05/21 16:23
1,通过并发容器来替代同步容器,可以极大地提高伸缩性并降低风险
2,ConcurrentHashMap
2.1,用来替代同步的Map,同Map一样也是基于散列的Map。
2.2,但是它使用一种更加细粒度的加锁机制(分段锁LockStriping)来实现大程度的共享。
2.3,它允许多个线程同时对容器进行读写操作,在并发访问环境下实现更高的吞吐量,在单线程中也只损失非常小的性能,
2.4,它在迭代时不会抛出ConcurrentModificationException,不需要在迭代过程中对容器加锁,它的迭代器具有弱一致性,并非“及时失败”。,22.5,并发容器的size和isEmpty只是一个近视值,无法再并发环境下提供一个精确值,但是这些值在并发环境下用处也很小,通过弱化这些操作,以换取其他操作新能的提升,包括get,put,containsKey和remove等
2.6,于HashTable和synchronizedMap相比,ConcurrentHashMap有着更多的优势以及更少的劣势,因此在大多情况下使用ConcurrentHashMap来代替同步Map能进一步提高代码的可伸缩性
2.7,只有在应用程序需要以加锁Map以进行独占访问时,才应该放弃使用ConcurrentHashMap
2.8,ConcurrentHashMap中没有实现对Map加锁以提供独占访问,因此也无法使用客户端加锁机制来创建新的原子操作。
3,CopyOnWriteArrayList
3.1,它用于替代同步List,在迭代期间不需要对容器进行加锁或复制,类似的使用CopyOnWriteArraySet替代同步Set
3.2,它迭代器不会抛出ConcurrentModificationException,并且返回的元素与迭代器创建时的元素完全一致,而不必考虑之后修改操作所带来的影响
3.3,每当修改容器时都会复制底层数组,这需要一定的开销。仅当迭代操作远远多于修改操作是才能使“写入时复制”容器
4,阻塞队列BlockingQueue
4.1,阻塞队列提供了可阻塞的put和take方法,以及支持定时的offer和poll方法
4.2,在构建高可用的应用程序时,有界队列是一种强大的资源管理工具,他们能抑制并防止产生过多的工作项,使应用程序在负荷过载的情况下变得更加健壮
4.3,阻塞队列包括:LinkedBlockingQueue,ArrayBlockingQueue,PriorityBlockingQueue。还有一个SynchronousQueue,它维护的是一组线程,而不是数据,它会一直阻塞直到有另一个线程已经准备好参与到交付过程中。
4.4,仅当有足够多的消费者,并且总有一个消费者准备好获取交付的工作时,才适合使用同步队列
5,双端队列Deque
5.1,正如阻塞队列适用于生产者消费者模式,双端队列同样适用于另一种模式,即工作密取(WorkStealing)
5.2,工作密取指的是每个消费者都有各自的双端队列,如果一个消费者完成了自己双端队列中的全部工作,那么它可以秘密地从其他消费者队列末尾获取工作。工作密取可以极大的减少竞争,比传统的生产者消费者模式具有更高的可伸缩性
2,ConcurrentHashMap
2.1,用来替代同步的Map,同Map一样也是基于散列的Map。
2.2,但是它使用一种更加细粒度的加锁机制(分段锁LockStriping)来实现大程度的共享。
2.3,它允许多个线程同时对容器进行读写操作,在并发访问环境下实现更高的吞吐量,在单线程中也只损失非常小的性能,
2.4,它在迭代时不会抛出ConcurrentModificationException,不需要在迭代过程中对容器加锁,它的迭代器具有弱一致性,并非“及时失败”。,22.5,并发容器的size和isEmpty只是一个近视值,无法再并发环境下提供一个精确值,但是这些值在并发环境下用处也很小,通过弱化这些操作,以换取其他操作新能的提升,包括get,put,containsKey和remove等
2.6,于HashTable和synchronizedMap相比,ConcurrentHashMap有着更多的优势以及更少的劣势,因此在大多情况下使用ConcurrentHashMap来代替同步Map能进一步提高代码的可伸缩性
2.7,只有在应用程序需要以加锁Map以进行独占访问时,才应该放弃使用ConcurrentHashMap
2.8,ConcurrentHashMap中没有实现对Map加锁以提供独占访问,因此也无法使用客户端加锁机制来创建新的原子操作。
3,CopyOnWriteArrayList
3.1,它用于替代同步List,在迭代期间不需要对容器进行加锁或复制,类似的使用CopyOnWriteArraySet替代同步Set
3.2,它迭代器不会抛出ConcurrentModificationException,并且返回的元素与迭代器创建时的元素完全一致,而不必考虑之后修改操作所带来的影响
3.3,每当修改容器时都会复制底层数组,这需要一定的开销。仅当迭代操作远远多于修改操作是才能使“写入时复制”容器
4,阻塞队列BlockingQueue
4.1,阻塞队列提供了可阻塞的put和take方法,以及支持定时的offer和poll方法
4.2,在构建高可用的应用程序时,有界队列是一种强大的资源管理工具,他们能抑制并防止产生过多的工作项,使应用程序在负荷过载的情况下变得更加健壮
4.3,阻塞队列包括:LinkedBlockingQueue,ArrayBlockingQueue,PriorityBlockingQueue。还有一个SynchronousQueue,它维护的是一组线程,而不是数据,它会一直阻塞直到有另一个线程已经准备好参与到交付过程中。
4.4,仅当有足够多的消费者,并且总有一个消费者准备好获取交付的工作时,才适合使用同步队列
5,双端队列Deque
5.1,正如阻塞队列适用于生产者消费者模式,双端队列同样适用于另一种模式,即工作密取(WorkStealing)
5.2,工作密取指的是每个消费者都有各自的双端队列,如果一个消费者完成了自己双端队列中的全部工作,那么它可以秘密地从其他消费者队列末尾获取工作。工作密取可以极大的减少竞争,比传统的生产者消费者模式具有更高的可伸缩性
阅读全文
0 0
- java并发编程实战-基础构建模块2
- Java并发编程实战:并发基础构建模块
- 《java并发编程实战》基础构建模块(一)
- 《java并发编程实战》基础构建模块(二)
- 《java并发编程实战》基础构建模块(三)
- 《java并发编程实战》基础构建模块(四)
- 《java并发编程实战》基础构建模块(五)
- 《java并发编程实战》基础构建模块(六)
- 《java并发编程实战》基础构建模块(七)
- Java并发编程实战笔记(四):基础构建模块
- java并发编程实战学习(3)--基础构建模块
- Java 并发编程实战之 基础构建模块
- java并发编程实战-基础构建模块1
- java并发编程实战-基础构建模块3
- Java并发编程实战(二)基础构建模块
- Java并发编程实战笔记(4)-基础构建模块
- java并发编程实战:基础构建模块笔记
- Java 并发编程之基础构建模块
- Python学习之路之一
- java 的快捷键
- 善用性能工具进行SQL整体优化
- Android绘图机制与处理技巧(五)Android图像处理之画笔特效处理
- 奥迪联手英伟达打造全自动驾驶汽车
- java并发编程实战-基础构建模块2
- Ubuntu卸载预装
- 数据仓库之ETL漫谈-实战总结理论
- 如何评价一段代码
- 如何在Ubuntu中将默认的python改为python2
- C语言中exit(0)与exit(1)有什么区别
- Hessian
- Servlet的相关类与接口
- Phong光照