ConcurrentHashMap在Java8中的变化
增加红黑树这个存储结构
在Java8中,为什么要增加红黑树这种数据结构来进行存储,而不是全部使用链表来进行存储呢? 1.因为攻击者可以构造大量具有相同hashCode的内容,使其全部放在同一个列表中,这样,在查找的时候,所花费的时间会很长。这个时候,如果采用红黑树这个结构来进行存储,那么其查找的效率会高很多。 2.hashCode()函数的计算有时候并不合理,例如重写hashCode函数的时候。如果都映射到同一个位置,那么查找的时间也会很长。
mappingCount()
在ConcurrentHashMap中如果存储大量的元素,那么使用size()方法获取的结果可能不正确,因为其是用int类型作为返回值的。
如果想要获取到正确的结果,那么可以使用hashMap.mappingCount();其返回值为long类型。
更新指定键中的值
ConcurrentHashMap是一个安全的数据结构(get()、put()操作不会破坏数据结构),但是它的并不保证操作值的安全。例如设置对应键的值,这个就不是线程安全的。
如何才能安全地更新值呢?
使用replace()方法
值使用的是LongAdder,它可以保证原子操作
Java8新增的方法来实现线程安全地对键进行操作
ConcurrentHashMap在Java8中的变化的更多相关文章
- Java7与Java8中的HashMap和ConcurrentHashMap知识点总结
JAVA7 Java7的ConcurrentHashMap里有多把锁,每一把锁用于其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率呢.这 ...
- Java8 中 ConcurrentHashMap工作原理的要点分析
简介: 本文主要介绍Java8中的并发容器ConcurrentHashMap的工作原理,和其它文章不同的是,本文重点分析了不同线程的各类并发操作如get,put,remove之间是如何同步的,以及这些 ...
- Java7 和 Java8 中的 ConcurrentHashMap 原理解析
Java7 中 ConcurrentHashMap ConcurrentHashMap 和 HashMap 思路是差不多的,但是因为它支持并发操作,所以要复杂一些. 整个 ConcurrentHash ...
- java7,java8 中HashMap和ConcurrentHashMap简介
一:Java7 中的HashMap 结构: HashMap 里面是一个数组,然后数组中每个元素是一个单向链表.链表中每个元素称为一个Entry 实例,Entry 包含四个属性:key, value, ...
- java8 中的时间和数据的变化
java8除了lambda表达式之外还对时间和数组这两块常用API做想应调整, Stream 有几个常用函数: store 排序 (a,b)-> a.compareTo(b) 排出来的结果是正 ...
- java8中ConcurrentHashMap
HashMap的线程不安全主要体现在resize时的死循环及使用迭代器时的fast-fail上. Fast-fail: fail-fast 机制是java集合(Collection)中的一种错误机制. ...
- Java8中的HashMap分析
本篇文章是网上多篇文章的精华的总结,结合自己看源代码的一些感悟,其中线程安全性和性能测试部分并未做实践测试,直接是“拿来”网上的博客的. 哈希表概述 哈希表本质上一个数组,数组中每一个元素称为一个箱子 ...
- java8中map的meger方法的使用
java8中map有一个merge方法使用示例: /** * 打印出包含号码集的label的集合 * * @param args */ public static void main(String[] ...
- 谈一谈Java8的函数式编程(二) --Java8中的流
流与集合 众所周知,日常开发与操作中涉及到集合的操作相当频繁,而java中对于集合的操作又是相当麻烦.这里你可能就有疑问了,我感觉平常开发的时候操作集合时不麻烦呀?那下面我们从一个例子说起. 计 ...
- Java8函数之旅 (二) --Java8中的流
流与集合 众所周知,日常开发与操作中涉及到集合的操作相当频繁,而java中对于集合的操作又是相当麻烦.这里你可能就有疑问了,我感觉平常开发的时候操作集合时不麻烦呀?那下面我们从一个例子说起. 计 ...
随机推荐
- 京准GPS北斗卫星时钟同步系统投运国电内蒙古晶阳能源有限公司
京准GPS北斗卫星时钟同步系统投运国电内蒙古晶阳能源有限公司 2020年1月初期,我京准科技生产研发的GPS北斗卫星时钟同步系统投运国电内蒙古晶阳能源有限公司,为该单位的能源管理系统及其他各业务子系 ...
- Ubuntu14.04下Git安装与使用
Workspace : 工作区,就是你平时存放项目代码的地方 Index / Stage : 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息 Repository ...
- [OC] 按照 元素 中的某个属性 来对数组进行排序
数组需要是 NSMutableArray 类型: //ascending - YES:升序,1,2,3 NO:降序:3,2,1 NSArray *sortDescriptors = [NSArray ...
- Python的入门学习Day 10——form”夜曲编程“
Day 10 time:2021.8.7. 今天本来打算学习时发现手机应该拿去充电了,再上完J课程之后发现时间确实只留到了晚上呢 .但幸好,以我多天的敲代码的牢固根基(哈哈哈),我最终还是弥补回来了. ...
- 【BOOK】数据存储--MongoDB
MongoDB存储 1.链接MongoDB 指定数据库 指定集合 import pymongo ## 连接数据库 client = pymongo.MongoClient( ...
- AcWing 791. 高精度加法C++数组实现
高精度加法 a, b均为正整数 #include <iostream> using namespace std; const int N = 100010; int A[N], B[N], ...
- IO学习笔记6
2.3 多路复用 但是NIO仍有它的缺陷,因为服务端和客户端都在一个线程中,主线程遍历客户端集合去每一个客户端都问一遍:你有没有数据,这样的话,如果有10K个客户端,只有最后一个客户端才收到了信息,但 ...
- python快速制作可视化报表
- jmeter分布式压测配置
首选 压力机A,压力机B,压力机C, 压力机A作为控制台 压力机B,压力机C作为分布式的测试机 压力机Aip:172.16.23.69, 压力机Bip:192.168.184.128 压力机 ...
- Unity实现手机录音功能
using UnityEngine;using System.Collections;public class MicPhoneScripts : MonoBehaviour{ private ...