持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情
java并发容器四
前文
之前讨论过一些其他的容器内容,列表类型的容器以及几个常用的map,本文将继续对一些其他类型的容器进行讨论。
CopyOnWrite
简单的来讲,这是一类的容器。这类容器主要的思想在于进行写时复制。CopyOnWriteList和CopyOnWriteSet是主要常见的两种此类容器。这类容器主要的处理方式在于进行读写上的分离。由于读数据时实际上并不会涉及到并发的问题,因此读数据时的如果像之前的容器一样的加锁其实理论上也是存在效率的问题。因此此类容器针对这个问题进行了优化,在读数据时并不进行加锁操作。但当数据需要进行写入时,将原有的数据进行复制操作,而新增的容器添加到新的数据位置。此后再将指针转移到新的存储位置,也就实现了写时复制的思想。
BlockingQueue
这是一种在线程池中非常常用的容器。在线程池的队列中,需要将待处理的线程存储到该容器之中。而这个容器本身是一个队列,但它保证同一时刻只能够有同一个线程进行数据的处理,添加数据或移除数据。而也就是由于这种单一线程操作的自带的特性,该容器可以认为是线程安全的。同时根据其名字来说,该容器剧本阻塞的特性,当容器内容量达到满额时,无法再继续进行数据的添加。
而该类型也是一类的容器,包含有ArrayBlockingQueue、LinkedBlockingQueue等等多种具体的类型。各类型都有其独有的性质,也就带来了不同的应用场景。举例来说ArrayBlockingQueue,当进行数据添加时会首先进行容量的判断。如果容量已满,则会拒绝数据的添加。只有当容器未达到目标值时,才能继续进行数据的增加处理。
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。