1、同步容器类
同步容器类包括Vector和Hashtable
同步容器类是线程安全,这是因为这些类实现线程安全的方式是把它们的状态封装起来,并且对每个共有方法都进行同步,使得每次只有一个线程能访问容器的状态。
1.1 同步容器类的问题
- 同步容器类在进行迭代,跳转,条件运算时,如果其它线程并发的修改容器,就会出现意外的行为。
- 同步容器类将所有对容器状态的访问都串行化,严重降低了并发性,当多个线程竞争容器的锁时,吞吐量将严重降低。
2、并发容器类
ConcurrentHashMap:采用分段锁机制,在并发环境下实现更高的吞吐量,在单线程环境下只损失非常小的性能。
CopyOnWriteArrayList:代替同步List,当且仅当迭代操作远远多于修改操作时,才应该使用写入时复制容器。类似的,CopyOnWriteArraySet一样。
3、阻塞队列
ArrayBlockingQueue与LinkedBlockingQueue
3.2 相同点
相同点:都是FIFO的阻塞队列。
3.1 不同点
- ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列,而LinkedBlockingQueue内部是用链表来存储数据的。
- ArrayBlockingQueue内部通过“互斥锁”保护竞争资源,实现了多线程对竞争资源的互斥访问。ArrayBlockingQueue内部是以数组为容器盛放元素,并且放入和取出元素的时候使用同一个锁,也就是放入的时候不能同时取出元素. LinkedBlockingQueue内部是用链表来存储数据的,并且有两把锁,放数据锁与取数据锁,也就是放入数据的线程和取出数据的线程可以同时操作LinkedBlockingQueue