JAVA同步容器和并发容器
一、同步容器:
包括Vector、HashTable,以及Collections.synchronizedXXX方法包装过的容器类,同步容器对其类中的每一个对外的方法都使用synchronized关键字进行修饰,以此来保证同步,以Hashtable为栗子:
虽然保证了线程安全,但这样每次只有一个线程访问容器,所以在并发的情况下性能上会削弱许多,仍需要在方法中加锁。并且迭代时如果数据发生变动仍然会抛出ConcurrentModificationException:
二、并发容器:
专门为多线程设计,并且不会抛出ConcurrentModificationException,常见的包括如下:
1、ConcurrentHashMap:在HashMap的基础上采用分段锁,所以效率高于Hashtable。
2、CopyOnWriteArrayList:使用“写入时复制”的方法,维护一个Object类型的数组,写入新数据时,复制一份原有数组的拷贝,对这份拷贝改动后再代替原有的数组,在这个过程中如果有读取,则返回原数组:
3.BlockingQueue:LinkedBlockingQueue、ArrayBlockingQueue等相关实现类。