线程并发学习五(基础构建模块)

liuzhihai 2013-10-17

1.将线程安全类委托给现有的线程安全类,只需让现有的线程安全类管理多有的状态即可。

2.Java平台类库包含了丰富的并发基础构建模块,例如线程安全的容器类以及各种用于协调多个相互协作的线程控制流的同步工具类(synchronizer);

3.同步容器类:同步容器类是线程安全的,但在某些情况下,可能需要额外的客户端加锁来保护符合操作. 早期的jdk中,同步容器类包括Vector和Hashtable

4.并发容器:java5.0提供了多种并发容器类来改进同步容器的性能,同步容器将所有对容器状态的访问都串行化,以实现他们的线程安全性,这种方法的代价是严重降低并发性,当多个线程竞争容器的锁时,吞吐量将严重降低。

并发容器是针对多个线程并发访问设计的。

java5.0增加了两种新的容器类型:Queue和BlockingQueue,Queue的实现,包括ConcurrentLinkedQueue,这是一个传统的先进先出队列。PriorityQueue并发的优先队列。Queue上的操作不会阻塞,如果队列为空,那么获取元素的操作将返回空值。

5.ConcurrentHashMap,同步容器类在执行每个操作期间都持有一个锁,ConcurrentHashMap是一个基于散列的Map,使用了一种完全不同的加锁策略,来提供更高的并发性和伸缩性。ConcurrentHashMap并不是将每个方法都在同一个锁上同步并使得每次只能有一个线程访问容器,而是使用一种粒度更细的加锁机制来实现更大程度的共享,这种机制称为分段锁。

ConcurrentHashMap:并发访问环境下将实现更高的吞吐量,而在单线程环境中只损失非常小的性能。

ConcurrentHashMap与其他并发容器一起增强了同步容器类:他们提供的迭代器不会抛出ConcurrentModificationException,因此不需要在迭代过程中对容器加锁。

ConcurrentHashMap中没有实现对Map加锁以及提供独占访问。

6.CopyOnWriteArrayList:用于代替同步List,在某些情况下提供更好的并发性能,并且在迭代期间不需要对容器加锁或者复制[CopyOnWriteArraySet是代替同步的set]

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

阻塞队列提供了可阻塞的put和take方法,以及支持定时的offer和poll方法,if队列满了,那么put方法将阻塞知道空间可用,if队列为空,take方法将会阻塞知道元素可用。

当然队列可以是无界的,无界队列永远不会满,所以put方法永远不会阻塞。

8.串行线程封闭:java.util.concurrent中实现的各种阻塞队列都包含了足够的内部同步机制,从而安全的将对象从生产者发布到消费者线程。

9.双端队列与工作密取

10闭锁

11栅栏

相关推荐