ConcurrentHashMap 同步安全 的真正含义(stringbuff 是同步安全的,stringbutter 不安全)
同步安全的集合,在多线程下用到这个map是安全的,但这个安全指的是什么?线程安全指的是指get、remove、put等操作时即同一对象,同一时间只有一个线程能在这几个方法上运行,也就是说线程安全是在这集合的三个操作基础上是线程安全的,但由于集合往往都和迭代器组合起来用,比如集合的遍历,一般都是和itator组合用,即itator是一个对象,这个对象里有当前索引位置(初始索引为0即集合第一个下标)和上一个索引位置(初始为-1,即集合第一个下标的前一个下标,第一个下标为0,那前一个下标 当然是-1)和理想迭代的数量(这个属性不知道干什么用的)以及集合的引用,就是说这个itato对象有四个属性,其中前2个属性用来迭代用的,第三个属性不知道干啥用的,第四个属性就是原来集合的一个镜像,最终迭代完就是通过这第四个镜像来同步原来的集合用的,线程安全安全就是体现在这里,假如一个集合是不安全的,那这个集合在遍历时假如itator中第四个属性即原集合的镜像在一个线程里是删除(目前只测试了删除会报错,get方法忘记测试了)操作,在另外一个线程里是加入一个元素,结果2个线程同步原集合时就会出现少加或者多加等莫名其妙的问题(在map遍历时能否进行元素的删除,修改可以,但删除有的map可以有的则不行,不行的map删除必报错:java.util.ConcurrentModificationException ,比如hashMap、list 等 集合是不安全 集合,遍历时是不能删除的,而 ConcurrentHashMap 是多线程安全的map集合,遍历时就可以删除。至于为啥不能删除上边说了原因,就是因为hashmap、list等遍历时是通过itator 遍历的,而其遍历时是元素是不可逆的,而且枷锁的,当正遍历时如有其中一个删除,第四个属性镜像同步外部的list 或者 hashmap 时 由于找不到 list或者hashmap中的对应元素就会报错。),而有个map是线程安全的,就不用担心这个问题,至于怎么个不用担心,原因是遍历时不用迭代器还是通过其他方式保证安全我不知道,反正就不用关心出错就行。还有就是 不管这个map是不是线程安全的,假如map就是线程安全的,多线程下还是要加这个同步锁,因为map自身的线程安全不是指这一方面的安全(上边讲了线程安全的意义),假如这个集合在多线程下有改动,还是需要synchronize 锁住的,不然多线程下,集合中的一个对象在这个线程中修改成那个值,在这个线程下修改为这个值,2个线程下这个对象值不一致,不可控,结果肯定也是数据错乱问题,所以在业务中仍然还应该要加锁 。 那不安全的集合啥时候用呢,一个是单线程下可以用,但仍不可以遍历时删除,还一个就是 比如基础模板封装的集合,这个集合只会 get不会删除,这种情况可以选择非同步安全的集合。所以不管单线程还是多线程,几乎最好都用线程安全的集合(集合只用来get 不会删除的除外可以用非安全的集合,如游戏基础数据存放的集合)。
补:集合线程安全不安全除了上边说的遍历时删除会报错,即出现不安全的问题,还有就是多线程间调用同一个集合,修改集合中的同一个对象属性时,如果是多线程同时修改的话,第四个属性同步时也会出现不安全的报错问题。
ConcurrentHashMap 同步安全 的真正含义(stringbuff 是同步安全的,stringbutter 不安全)的更多相关文章
- 数据库同步工具HKROnline SyncNavigator SQL Server互同步MySQL
需要联系我QQ:786211180 HKROnline SyncNavigator 是一款专业的 SQL Server, MySQL 数据库同步软件.它为您提供一种简单智能的方式完成复杂的数据库数据同 ...
- centos shell编程4【分发系统】 服务器标准化 mkpasswd 生成密码的工具 expect讲解 expect传递参数 expect自动同步文件 expect指定host和要同步的文件 expect文件分发系统 expect自动发送密钥脚本 Linux脚本执行方式 第三十八节课
centos shell编程4[分发系统] 服务器标准化 mkpasswd 生成密码的工具 expect讲解 expect传递参数 expect自动同步文件 expect指定host和要 ...
- 【同步工具类】CountDownLatch闭锁任务同步
[同步工具类]CountDownLatch闭锁任务同步 转载:https://www.cnblogs.com/yangchongxing/p/9214284.html 打过dota的同学都知道,多人一 ...
- 搭建NTP时间服务器~使用NTP同步时间~构建主机间时间自动同步关系
NTP是一个时间服务器,同时它也是一个时间客户端. 我们可以使用它构建主机与主机之间的时间自动同步环境,保证所有服务器时间一致性. 常用的公共NTP时间服务器有: cn.ntp.org.cn 中国 n ...
- Delphi:与VCL同步(Synchronize()、用消息来同步)
看本文时,可以同时参考:Delphi中线程类 TThread实现多线程编程(事件.临界区.Synchronize.WaitFor……) 先说一下RTL和VCL RTL(Run-Time library ...
- 定时自动同步文件,支持多文件夹同步,支持过滤文件和文件夹,解决FileSystemWatcher多次文件触发事件(源码)
博客园里面有很多同步工具和软件,关于FileSystemWatcher类解释的也很多,但收集了很多文章后,感觉没好的方法,自己没事写了一个定时文件同步,借鉴了很多博客园朋友的东西: 上主菜: 配置文件 ...
- centos 7.2 同步北京时间 ,多台机器同步时间
linux 系统没有北京时间,同步的是上海时间 linux 系统有两个时钟:一个是硬件时钟,即BIOS时间:另一个是系统时钟,是linux系统Kernel(内核)时间. 系统开启时,系统会读取硬件时间 ...
- mysql数据库主从同步读写分离(一)主从同步
1.mysql数据库主从同步读写分离 1.1.主要解决的生产问题 1.2.原理 a.为什么需要读写分离? 一台服务器满足不了访问需要.数据的访问基本都是2-8原则. b.怎么做? 不往从服务器去写了 ...
- rsync 实现文件同步 (重要数据通过rsyncr把数据同步到不同的两台服务器上,这样可以防止服务器的硬盘故障导致数据丢失) 客户端同步时如果要排某个目录
rsync是unix系统下的数据镜像 备份工具,一般linux系统都 自带: # rpm -qa|grep rsync rsync-3.0.9-17.el7.x86_64 服务器端:10.100.0. ...
随机推荐
- [剑指offer]14-1.剪绳子
14-1.剪绳子 方法一 动态规划 思路:递归式为f(n)=max(f(i), f(n-i)),i=1,2,...,n-1 虽然我现在也没有彻底明白这个递归式是怎么来的,但用的时候还是要注意一下.f( ...
- 浅析二分搜索树的数据结构的实现(Java 实现)
目录 树结构简介 二分搜索树的基础知识 二叉树的基本概念 二分搜索树的基本概念 二分搜索树的基本结构代码实现 二分搜索树的常见基本操作实现 添加操作 添加操作初步实现 添加操作改进 查询操作 遍历操作 ...
- UNIX环境高级编程——TCP/IP网络编程 常用网络信息检索函数
UNIX环境高级编程——TCP/IP网络编程 常用网络信息检索函数 gethostname() getppername() getsockname() gethostbyname() ...
- JSOI 2016 病毒感染 辅助Dp问题
原题链接:https://www.luogu.com.cn/problem/P5774 分析 直接看这道题,第一个困惑点,那个绝对值的比较是什么东西,根据数学知识,我们可以知道这个意思是k到i的距离小 ...
- Transformers 库常见的用例 | 三
作者|huggingface 编译|VK 来源|Github 本章介绍使用Transformers库时最常见的用例.可用的模型允许许多不同的配置,并且在用例中具有很强的通用性.这里介绍了最简单的方法, ...
- 简单理解vertical-align属性和基线问题
vertical-align属性主要用于改变行内元素的对齐方式,对于行内布局影响很大,如果不了解的话,我们开发调整样式的时候很容易出错. 网上关于这个属性的原理说得很是复杂,看一眼就让人觉得望而生畏, ...
- 记录一个不同的流媒体网站实现方法,和用Python爬虫爬它的坑
今天找到一片电影,想把它下载下来. 先开Networks工具分析一下: 初步分析发现,视频加载时会拉取TS格式的文件,推测这是一个m3u8的索引,记录着几百段TS文件,这样方便快进时加载. 但是实际分 ...
- 基于vue-cli-和element-ui的开发admin(1)
//首先以下仅是记录个人本次vue后台管理系统的登录界面部分操作的流程以及踩坑的注意点 一.首先是搭建vue-cli工作环境 这里有两种方式:1.用npm:(在安装了vue,vue-cli以及webp ...
- A股调整结束 很可能明天开始阶段性反弹 目标3100左右
A股调整结束 很可能明天开始阶段性反弹 目标至少AC等距. A浪2685-3059=374 C浪2715+374=3089 长周期看 A股处于 2300-4300长期震荡中.A股的牛市还要等几年.
- html vue简单
1.Vue 简单的替换更新 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...