并发容器
并发容器
- 通过
synchronized 给方法加上内置锁来实现线程安全的类如Vector ,HashTable,StringBuffer AtomicXXX 如AtomicInteger ConcurrentXXX 如ConcurrentHashMap - BlockingQueue/BlockingDeque
- CopyOnWriteArrayList/CopyOnWriteArraySet
- ThreadPoolExecutor
值得提到的是,线程安全类并不代表也不等同线程安全的程序,而线程不安全的类同样可以完成线程安全的程序。我们关注的也就是写出线程安全的程序,那么如何写出线程安全的代码呢,核心就是避免共享的可变状态。
快速失败和安全失败
快速失败(fail—fast)
在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改
原理:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个
注意:这里异常的抛出条件是检测到
场景:
安全失败(fail—safe)
采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,在拷贝的集合上进行遍历。
原理:由于迭代时是对原集合的拷贝进行遍历,所以在遍历过程中对原集合所作的修改并不能被迭代器检测到,所以不会触发
缺点:基于拷贝内容的优点是避免了
场景: