java并发编程实战-基础构建模块1
2017-07-05 22:28
232 查看
1,委托是创建线程安全类的一个最有效的策略,只需让现有的线程安全类管理所有的状态即可。
2,同步容器类
2.1,同步容器类包括Vector和Hashtable。
2.3,同步容器是线程安全的类,并不保证在程序运行中一定是正常的。例如迭代不可靠问题:在迭代中如果有其他线程删除了容器中的元素,那么就可能会导致数组越界异常,这异常并不意味着容器不是线程安全的,容器的状态仍然是有效的,而且抛出的数组越界异常也与其规范保持一致。
2.4,关于容器迭代,在设计同步容器的迭代器时并没有考虑到并发修改问题,并且他们表现出的行为是“及时失败”(fail-fast)的。如果迭代期间计数器被修改了,那么hasNext和next将抛出异常ConcurrentModificationException。
2.5,如果希望容器在迭代时绝对的线程安全,只能在迭代外层持有容器的锁,这将意味着在容器迭代期间,其他线程时无法访问容器的,这将对程序性能带来影响,也可能带来更加复杂的并发问题,如死锁。
2.6,对于容器迭代另一个可选的方案是克隆,将副本封闭在线程内,这样做的利弊不同,因为封闭在线程内的副本能够达到线程安全的需求,但是程序性能还是要取决于容器的大小,因为克隆容器存在显著的性能开销
2.7,有时候容器的迭代会隐藏起来,如调用容器的toString函数,容器会迭代各个元素并调用其toStrig函数。容器的hashCode,equals,containsAll,removeAll,retainAll等方法都可能隐式的对容器进行迭代
2,同步容器类
2.1,同步容器类包括Vector和Hashtable。
2.3,同步容器是线程安全的类,并不保证在程序运行中一定是正常的。例如迭代不可靠问题:在迭代中如果有其他线程删除了容器中的元素,那么就可能会导致数组越界异常,这异常并不意味着容器不是线程安全的,容器的状态仍然是有效的,而且抛出的数组越界异常也与其规范保持一致。
2.4,关于容器迭代,在设计同步容器的迭代器时并没有考虑到并发修改问题,并且他们表现出的行为是“及时失败”(fail-fast)的。如果迭代期间计数器被修改了,那么hasNext和next将抛出异常ConcurrentModificationException。
2.5,如果希望容器在迭代时绝对的线程安全,只能在迭代外层持有容器的锁,这将意味着在容器迭代期间,其他线程时无法访问容器的,这将对程序性能带来影响,也可能带来更加复杂的并发问题,如死锁。
2.6,对于容器迭代另一个可选的方案是克隆,将副本封闭在线程内,这样做的利弊不同,因为封闭在线程内的副本能够达到线程安全的需求,但是程序性能还是要取决于容器的大小,因为克隆容器存在显著的性能开销
2.7,有时候容器的迭代会隐藏起来,如调用容器的toString函数,容器会迭代各个元素并调用其toStrig函数。容器的hashCode,equals,containsAll,removeAll,retainAll等方法都可能隐式的对容器进行迭代
相关文章推荐
- 《Java并发编程实战》读书笔记-第5章 基础构建模块
- Java并发编程实战笔记(4)-基础构建模块
- 《java并发编程实战》基础构建模块(六)
- java并发编程实战-基础构建模块2
- 《java并发编程实战》基础构建模块(四)
- 《java并发编程实战》基础构建模块(三)
- Java并发编程实战(学习笔记四 第五章 基础构建模块 上)
- 《Java并发编程实战》 阅读笔记 5. 基础构建模块
- 《java并发编程实战》基础构建模块(五)
- Java并发编程实战 - 第5章 基础构建模块
- Java并发编程实战(二)基础构建模块
- 《java并发编程实战》基础构建模块(二)
- 《java并发编程实战》基础构建模块(一)
- 《java并发编程实战》基础构建模块(七)
- java并发编程实战:基础构建模块笔记
- java并发编程实战-基础构建模块3
- 《java并发编程实战》读书笔记4--基础构建模块,java中的同步容器类&并发容器类&同步工具类,消费者模式
- java并发编程实战学习(3)--基础构建模块
- Java并发编程基础构建模块(01)——同步容器类
- Java并发编程基础构建模块(04)——线程阻塞与中断