java并发编程实战:基础构建模块笔记
2017-11-22 09:24
281 查看
同步容器类
同步容器类包括两个部分:一个是Vector一个是hashtable。jdk 1.2引入同步包装类。
Collections.sychronizedxxx
在利用迭代器foreach运用interator过程中,可能会抛出ConcurrentModificationException。所以在对于这种同步容器类迭代过程中要进行加锁处理。
隐藏迭代器
在对同步容器类调用toString,hashCode,equals,containsAll,removeAll,retainAll以及把容器作为参数的构造函数都会对容器进行迭代操作。并发容器类
ConcurrentHashMap,这是一种并发性容器类,这里并没有针对每一个方法使用同一个锁进行同步,而是在内部用一种分段锁来实现并发性操作。可以允许同时多个读线程操作,允许同时多个写线程操作,多个读线程与写线程同时操作。迭代过程不需要加锁,但是在迭代过程可能容量大小会发生变化。这种最重要的是用于针对get,put,containsKey和remove等操作频繁的多线程中。它增加了几个复合型的原子性操作,从而可以直接使用不用加锁。
CopyOnWriteArrayList,这是一种并发性容器类,迭代过程不需要加锁。它是“写入时复制”的容器,当在每次修改时候,都会复制底层数组,创建并发布一个新的容器副本。这种最重要用于需要频繁的进行迭代操作,且迭代操作远远大于修改操作的时候,多个线程可以同时对这个容器进行迭代操作,而不会彼此干扰且与修改容器的线程不相干。
#### Queue
是一种用来保存临时的数据,包括ConcurrentLinkedQueue,Queue上的操作不会阻塞,如果队列为空,会立即返回。
#### BlockingQueue
它主要用于并发操作方面。这是一种基于阻塞的队列,当从队列中获取元素时候,如果队列为空则等待,当向队列插入元素时候,如果队列满了则等待。它利用put和take来获取对象,这种操作都是在内部加锁机制实现的。常见的几个插入与移除对象操作:
put,将object放入队列中,如果无空间,则一直等待到有空间,会阻塞调用该方法的线程。
offer,如果可以放入object,则返回true,否则false。一会阻塞调用该方法的线程。
poll,获取首位对象,若立即得不到,可以等待一定时间后再返回值或者null。
take,获取首位对象,若队列为空,则一直等待有元素添加,会阻塞调用该方法的线程。
常见的子类包括ArrayBlockingQueue和LinkedBlockingQueue,分别用于替代LinkedList和ArrayList,提高并发性能。SynchronousQueue,这是一种同步移除与添加的队列,每个插入操作必须等待另一个
4000
线程的对应移除操作。同步队列没有任何内部容量,甚至连一个队列的容量都没有。
相关文章推荐
- Java并发编程实战笔记(4)-基础构建模块
- 《Java并发编程实战》 阅读笔记 5. 基础构建模块
- Java并发编程实战(学习笔记四 第五章 基础构建模块 上)
- 《java并发编程实战》基础构建模块(四)
- 《java并发编程实战》基础构建模块(七)
- java并发编程实战-基础构建模块2
- java并发编程实战学习(3)--基础构建模块
- java并发编程实战-基础构建模块1
- Java并发编程实战 - 第5章 基础构建模块
- 《java并发编程实战》基础构建模块(二)
- Java并发编程学习——《Java Concurrency in Practice》学习笔记 5.基础构建模块
- 《java并发编程实战》基础构建模块(三)
- JAVA并发编程学习笔记------基础构建模块
- Java并发编程实战(二)基础构建模块
- Java并发读书学习笔记(四)——基础构建模块
- 《Java并发编程实战》读书笔记-第5章 基础构建模块
- 《java并发编程实战》读书笔记4--基础构建模块,java中的同步容器类&并发容器类&同步工具类,消费者模式
- 《java并发编程实战》基础构建模块(六)
- 并发编程实战学习笔记(三)——基础构建模块
- java并发编程实战-基础构建模块3