Java多线程(同步容器类)

快速失败和安全失败
java.util包下的集合类都是快速失败的,在使用迭代器对某个集合类进行遍历时,如果修改了该集合类,那么就会立即抛出异常,这是为了防止在未来某个不确定的时间发成异常
而java.util.concurrent包下的都是安全失败的,在使用迭代器时,会提前将集合进行复制并遍历,此时修改迭代器内容,并不会影响正在遍历的集合内容,因此不会抛出异常

在多线程环境中,为了使得某些操作更加安全,常常会将一些复合操作用synchronized(object) 给括起来,这种方式是我们最熟悉的操作。
但是,如果被同步的代码块比较耗时的话,该操作会带来性能上的问题
比如:HashMap中的get,contains,可能会包含大量工作,而在执行类似的该代码块时,不仅会花费大量的实践,而且其他的线程不能访问该容器,

Java5.0提供了多种并发容器类来改进同步容器的性能。

如下面几个同步容器类
ConcurrentHashMap代替HashMap
CopyOnWriteArrayList代替ArrayList
原理则是,上面两个同步容器类在实现内部添加了颗粒度更小的同步代码块,在保证安全的前提下,大大提高了性能

你可能感兴趣的:(多线程)