首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

什么 ConcurrentHashMap 的读操作不需要加锁?为什么 ConcurrentHashMap 的读操作不需要加锁

---- 我们知道,ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢...普通的共享变量不能保证可见性,因为普通共享变量被修改之后,什么时候被写入主存是不确定的,当其他线程去读取时,此时内存中可能还是原来的旧值,因此无法保证可见性。...= null); } return null; } } 既然volatile修饰数组对get操作没有效果那加在数组上的volatile的目的是什么呢?...其实就是为了使得Node数组在扩容的时候对其他线程具有可见性而加的volatile 总结 在1.8中ConcurrentHashMap的get操作全程不需要加锁,这也是它比其他并发集合比如hashtable...get操作全程不需要加锁是因为Node的成员val是用volatile修饰的和数组用volatile修饰没有关系。 数组用volatile修饰主要是保证在数组扩容的时候保证可见性。

42620

什么ConcurrentHashMap的读操作不需要加锁

我们知道, ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢?...普通的共享变量不能保证可见性,因为普通共享变量被修改之后,什么时候被写入主存是不确定的,当其他线程去读取时,此时内存中可能还是原来的旧值,因此无法保证可见性。...= null); } return null; } } 既然volatile修饰数组对get操作没有效果那加在数组上的volatile的目的是什么呢?...其实就是为了使得Node数组在扩容的时候对其他线程具有可见性而加的volatile 总结 在1.8中ConcurrentHashMap的get操作全程不需要加锁,这也是它比其他并发集合比如hashtable...get操作全程不需要加锁是因为Node的成员val是用volatile修饰的和数组用volatile修饰没有关系。 数组用volatile修饰主要是保证在数组扩容的时候保证可见性。 END

1.8K20
您找到你想要的搜索结果了吗?
是的
没有找到

什么ConcurrentHashMap的读操作不需要加锁

什么ConcurrentHashMap的读操作不需要加锁?...我们知道,ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢?...普通的共享变量不能保证可见性,因为普通共享变量被修改之后,什么时候被写入主存是不确定的,当其他线程去读取时,此时内存中可能还是原来的旧值,因此无法保证可见性。...其实就是为了使得Node数组在扩容的时候对其他线程具有可见性而加的volatile 总结 在1.8中ConcurrentHashMap的get操作全程不需要加锁,这也是它比其他并发集合比如hashtable...2021Java面试宝典 get操作全程不需要加锁是因为Node的成员val是用volatile修饰的和数组用volatile修饰没有关系。

32010

什么ConcurrentHashMap的读操作不需要加锁

间:9.99分钟 我们知道,ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢...普通的共享变量不能保证可见性,因为普通共享变量被修改之后,什么时候被写入主存是不确定的,当其他线程去读取时,此时内存中可能还是原来的旧值,因此无法保证可见性。...= null); } return null; } } 既然volatile修饰数组对get操作没有效果那加在数组上的volatile的目的是什么呢?...其实就是为了使得Node数组在扩容的时候对其他线程具有可见性而加的volatile 总结 在1.8中ConcurrentHashMap的get操作全程不需要加锁,这也是它比其他并发集合比如hashtable...get操作全程不需要加锁是因为Node的成员val是用volatile修饰的和数组用volatile修饰没有关系。 数组用volatile修饰主要是保证在数组扩容的时候保证可见性。

56410

什么ConcurrentHashMap的读操作不需要加锁

来源:https://cnblogs.com/keeya/p/9632958.html 为什么ConcurrentHashMap的读操作不需要加锁?...我们知道,ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢?...普通的共享变量不能保证可见性,因为普通共享变量被修改之后,什么时候被写入主存是不确定的,当其他线程去读取时,此时内存中可能还是原来的旧值,因此无法保证可见性。...其实就是为了使得Node数组在扩容的时候对其他线程具有可见性而加的volatile 总结 在1.8中ConcurrentHashMap的get操作全程不需要加锁,这也是它比其他并发集合比如hashtable...get操作全程不需要加锁是因为Node的成员val是用volatile修饰的和数组用volatile修饰没有关系。 数组用volatile修饰主要是保证在数组扩容的时候保证可见性。

27820

什么情况下需要重写hashcode方法_gethashcode

HashCode作用 举个栗子 假设内存中有0 1 2 3 4 5 6 7 8这八个位置,如果我有个字段叫做ID,那么我要把这个字段存在以上8个位置之一,如果不用HashCode而任意存放,那么当查找时就需要到...这就对应了上面所说的链式结构中的场景,发生了碰撞,这个时候就需要定义equals了。先通过HashCode%8来判断对象在哪一个位置,再通过equals来在这个位置上寻找需要的对象。...HashMap实现的,先通过HashCode 取一个模,这样一下子就固定的某一个位置,如果这个位置上没有元素,那么就可以肯定HashSet中必定没有和新添加的元素equals的元素,就可以直接存 放了,都不需要比较...如果原来的Set里面有相同的元素,只要HashCode的生 成方式定义得好(不重复),不管Set里面原来有多少元素,只需要执行一次的equals就可以了。...为什么重写Object的equals(Object obj)方法尽量要重写Object的hashCode()方法 重写Object的equals(Object obj)方法的时候,应该尽量重写hashCode

45730

什么情况下需要考虑分库分表?

什么情况下需要考虑分库分表? 不管是IO瓶颈还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载的活跃连接数的阈值。...结果: 每个库的结构都一样 每个库中的数据不一样,没有交集 所有库的数据并集是全量数据 场景:系统绝对并发量上来了,分表难以根本上解决问题,并且还没有明显的业务归属来垂直分库的情况下。...结果: 每个库的结构都不一样 每个库的数据也不一样,没有交集 所有库的并集是全量数据 场景:系统绝对并发量上来了,并且可以抽象出单独的业务模块的情况下。...在1:1或1:n的情况下,通常按照主表的ID进行主键切分。 跨节点分页、排序、函数问题 跨节点多库进行查询时,会出现limit分页、order by排序等问题。...什么时候考虑分库分表 能不分就不分 并不是所有表都需要切分,主要还是看数据的增长速度。切分后在某种程度上提升了业务的复杂程度。

7510

面试官:为什么 ConcurrentHashMap 的读操作不需要加锁

9632958.html 我们知道,ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢...普通的共享变量不能保证可见性,因为普通共享变量被修改之后,什么时候被写入主存是不确定的,当其他线程去读取时,此时内存中可能还是原来的旧值,因此无法保证可见性。...= null); } return null; } } “既然volatile修饰数组对get操作没有效果那加在数组上的volatile的目的是什么呢?...其实就是为了使得Node数组在扩容的时候对其他线程具有可见性而加的volatile 总结 在1.8中ConcurrentHashMap的get操作全程不需要加锁,这也是它比其他并发集合比如hashtable...get操作全程不需要加锁是因为Node的成员val是用volatile修饰的和数组用volatile修饰没有关系。 数组用volatile修饰主要是保证在数组扩容的时候保证可见性。

31410

什么情况下地产公司需要六西格玛

图片以下是地产公司可能需要六西格玛的几种情况:1. 提高项目质量和准确性:地产公司可能需要使用六西格玛方法来管理项目的数据分析和改进。...提高生产效率:地产公司可能需要使用六西格玛方法来优化生产流程。通过分析生产数据,可以发现瓶颈和浪费,并采取相应的措施来提高生产效率和降低成本。4....预测市场变化:地产公司可能需要使用六西格玛方法来预测市场趋势和需求。通过分析市场数据,可以识别出任何潜在的变化和趋势,以便做出更好的决策和策略。...在实际应用中,天行健想要提醒的是:地产公司需要根据具体情况来选择合适的六西格玛方法,以最大限度地提高效率和质量,提高公司的盈利能力和市场地位。

17130

什么 Linux 需要 Swapping

,然而并不知道它使用的部分虚拟内存其实在磁盘上,因为内存和磁盘的读写速度上的巨大差异,这部分虚拟内存的读写非常缓慢,我们在 为什么 CPU 访问硬盘很慢 曾经介绍过: 在 SSD 中随机访问 4KB 数据所需要的时间是访问主存的...其他的文件不能存储在该区域上,我们可以使用 swapon -s 命令查看当前系统上的交换分区; Swap 文件是文件系统中的特殊文件,它与文件系统中的其他文件也没有太多的区别; Swap 分区的大小是需要系统管理员手动设定的...我们到现在已经对 Linux 上的 Swapping 有了一定的了解,接下来回到这篇文章想要讨论的问题 — 『为什么 Linux 需要 Swapping』,我们将从以下两个方面介绍 Swapping 解决的问题...WMARK_MIN 时会触发上一节提到的内存直接回收,而水位高于 WMARK_HIGH 则意味着空闲内存充足,不需要进行回收。...Linux 中的 Swapping 机制主要是为内存不足和内存闲置两种常见的情况存在的 Swapping 可以直接将进程中使用相对较少的页面换出内存:当系统需要的内存超过了可用的物理内存时,内核会将内存中不常使用的内存页交换到磁盘上为当前进程让出内存

1.7K40

网站是否都要备案,什么情况下需要备案

无论是哪种备案,一般都需要7至10天,挺麻烦的哈。在选择域名时,.com的域名是首选,因为他是国际域名。...除了国际域名不需要备案,所有的地区域名都需要实名认证,如果是公司所有,那就需要以公司的名义进行备案。 如果是建中文网站,购买空间和主机都选择国内的服务,这是一定要备案的。...如果是以公司名义去建设这个网站,则需要提供公司的营业执照。如果是以个人的名义,则需要提供身份证电子扫描件。国内的所有备案都需要在网站建设成功之后把备案号放在网站底部显示出来,否则可能被查。...在国内备案,你只需要用身份证就可以,跟主机商沟通也方便,但是在国外,要求可能会更多,那真的是很费功夫,说不定到最后还不能备案成功。 没公司,是不是就建不了网站了呢?...并不是的,你是外贸人,需要的是英文网站。英文网站是不需要备案的,只要你不去买人家国家的地区域名,譬如.uk,你建网站就不需要实名认证,直接购买主机域名即可。很方便,不是吗?

9.7K00

Java 经典面试题:为什么 ConcurrentHashMap 的读操作不需要加锁

---- 我们知道,ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢...普通的共享变量不能保证可见性,因为普通共享变量被修改之后,什么时候被写入主存是不确定的,当其他线程去读取时,此时内存中可能还是原来的旧值,因此无法保证可见性。...= null); } return null; } } 既然volatile修饰数组对get操作没有效果那加在数组上的volatile的目的是什么呢?...其实就是为了使得Node数组在扩容的时候对其他线程具有可见性而加的volatile 总结 在1.8中ConcurrentHashMap的get操作全程不需要加锁,这也是它比其他并发集合比如hashtable...get操作全程不需要加锁是因为Node的成员val是用volatile修饰的和数组用volatile修饰没有关系。 数组用volatile修饰主要是保证在数组扩容的时候保证可见性。

3K40

Java 经典面试题:为什么 ConcurrentHashMap 的读操作不需要加锁

Node 总结 ---- 我们知道,ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢...普通的共享变量不能保证可见性,因为普通共享变量被修改之后,什么时候被写入主存是不确定的,当其他线程去读取时,此时内存中可能还是原来的旧值,因此无法保证可见性。...= null); } return null; } } 既然volatile修饰数组对get操作没有效果那加在数组上的volatile的目的是什么呢?...其实就是为了使得Node数组在扩容的时候对其他线程具有可见性而加的volatile 总结 在1.8中ConcurrentHashMap的get操作全程不需要加锁,这也是它比其他并发集合比如hashtable...get操作全程不需要加锁是因为Node的成员val是用volatile修饰的和数组用volatile修饰没有关系。 数组用volatile修饰主要是保证在数组扩容的时候保证可见性。

1.6K20

Samba服务器配置(什么情况下需要服务器)

一、简介 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,SMB(Server Message Block)服务器消息块 Samba最大的功能是可以用于Linux...与windows系统直接的文件共享和打印共享,既可以用于Windows与linux之间的文件共享也可以用于linuxlinux之间的资源共享 基于客户机/服务器的协议,因而一台Samba服务器既可以充当文件共享服务器...,也可以充当一个Samba客户端 Samba在windows下使用的是NetBIOS协议,要使用linux下共享出来的文件,要确认windows系统安装了NetBIOS协议 组成Samba...其实这就是Windows下查看Linux Samba服务器共享文件的方法。...主机作为客户端时,所需要的工具指令集 samba-4.8.3-4.el7.x86_64 //服务器端软件,主要提供samba服务器的守护程序,

1.5K30
领券