持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
java并发容器一
前文
并发容器是java使用过程中一种非常常用的数据结构,主要针对于多线程场景下的数据共享问题。由于不同线程在处理数据过程中对于同一数据的同时操作情况的存在,因此并发容器很重要的一点也是需要保证线程安全,不能保证不同线程进行同时的数据处理。下面简单的看几种java当中常用的并发容器。
容器分类
先来简单看一下并发容器的分类。根据接口的角度也可以分为两类,第一类是collection类,主要是单个元素的存储;而另一类是map类型的数据结构,主要则是属于k,v方式的存储。两者之间的区别主要是一个是属于元素的直接存储,另一个则是通过键值对的方式进行索引。
hashtable
hashtable是一种典型的map结构的实现,也是java最初的容器之一。而hashtable的实现方式,主要则是采用synchronized关键字进行加锁操作。当然,也是由于加锁的存在,hashtable会存在效率上的问题。当多线程同时访问时,首先都要进行获取锁的操作,而操作结束后也需要释放锁的操作。由于对于锁的操作也就产生了效率上的问题。
hashmap
hashmap也就是由于hashtable存在一定的效率问题,衍生出来的另一版本。但是由于hashmap一次性的采用彻底移出锁的操作,虽然进行了效率上的显著优化,但是当多线程进行访问时,如果多个线程同时进行数据插入,会产生线程安全的问题。因此,这也是hashmap天生的一种缺陷,不适合在多线程状态下进行并发插入处理。
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。