同步安全的集合,在多线程下用到这个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 不安全)的更多相关文章

  1. 数据库同步工具HKROnline SyncNavigator SQL Server互同步MySQL

    需要联系我QQ:786211180 HKROnline SyncNavigator 是一款专业的 SQL Server, MySQL 数据库同步软件.它为您提供一种简单智能的方式完成复杂的数据库数据同 ...

  2. centos shell编程4【分发系统】 服务器标准化 mkpasswd 生成密码的工具 expect讲解 expect传递参数 expect自动同步文件 expect指定host和要同步的文件 expect文件分发系统 expect自动发送密钥脚本 Linux脚本执行方式 第三十八节课

    centos shell编程4[分发系统] 服务器标准化  mkpasswd 生成密码的工具  expect讲解   expect传递参数   expect自动同步文件  expect指定host和要 ...

  3. 【同步工具类】CountDownLatch闭锁任务同步

    [同步工具类]CountDownLatch闭锁任务同步 转载:https://www.cnblogs.com/yangchongxing/p/9214284.html 打过dota的同学都知道,多人一 ...

  4. 搭建NTP时间服务器~使用NTP同步时间~构建主机间时间自动同步关系

    NTP是一个时间服务器,同时它也是一个时间客户端. 我们可以使用它构建主机与主机之间的时间自动同步环境,保证所有服务器时间一致性. 常用的公共NTP时间服务器有: cn.ntp.org.cn 中国 n ...

  5. Delphi:与VCL同步(Synchronize()、用消息来同步)

    看本文时,可以同时参考:Delphi中线程类 TThread实现多线程编程(事件.临界区.Synchronize.WaitFor……) 先说一下RTL和VCL RTL(Run-Time library ...

  6. 定时自动同步文件,支持多文件夹同步,支持过滤文件和文件夹,解决FileSystemWatcher多次文件触发事件(源码)

    博客园里面有很多同步工具和软件,关于FileSystemWatcher类解释的也很多,但收集了很多文章后,感觉没好的方法,自己没事写了一个定时文件同步,借鉴了很多博客园朋友的东西: 上主菜: 配置文件 ...

  7. centos 7.2 同步北京时间 ,多台机器同步时间

    linux 系统没有北京时间,同步的是上海时间 linux 系统有两个时钟:一个是硬件时钟,即BIOS时间:另一个是系统时钟,是linux系统Kernel(内核)时间. 系统开启时,系统会读取硬件时间 ...

  8. mysql数据库主从同步读写分离(一)主从同步

    1.mysql数据库主从同步读写分离 1.1.主要解决的生产问题 1.2.原理 a.为什么需要读写分离? 一台服务器满足不了访问需要.数据的访问基本都是2-8原则. b.怎么做?  不往从服务器去写了 ...

  9. rsync 实现文件同步 (重要数据通过rsyncr把数据同步到不同的两台服务器上,这样可以防止服务器的硬盘故障导致数据丢失) 客户端同步时如果要排某个目录

    rsync是unix系统下的数据镜像 备份工具,一般linux系统都 自带: # rpm -qa|grep rsync rsync-3.0.9-17.el7.x86_64 服务器端:10.100.0. ...

随机推荐

  1. Natas0 Writeup(前端源码、敏感信息)

    Natas0: 提示密码就在本页,右键查看源码,注释中发现flag. flag:gtVrDuiDfck831PqWsLEZy5gyDz1clto 总结:客户端代码注释中切勿保存敏感信息.  

  2. vscode如何配置debug,python正则表达式如何匹配括号,关于python如何导入自定义模块

    关于vscode如何配置debug的问题: 1.下载安装好python,并且配置好 环境变量 2.https://www.cnblogs.com/asce/p/11600904.html 3.严格按照 ...

  3. 用svg+css 或者js制作打钩的动画

    之前老板让做一个登陆后 可以显示一个打钩的效果 百度死活搜不到 今天在B站看到的一个视频居然有 根据需求改进了一下废话不多说先看效果! html代码 <!DOCTYPE html> < ...

  4. 强化学习之三:双臂赌博机(Two-armed Bandit)

    本文是对Arthur Juliani在Medium平台发布的强化学习系列教程的个人中文翻译,该翻译是基于个人分享知识的目的进行的,欢迎交流!(This article is my personal t ...

  5. 近期 github 机器学习热门项目 top5

    欢迎大家关注我们的网站和系列教程:http://panchuang.net/ ,学习更多的机器学习.深度学习的知识! 作者:Walker No1:NVIDIA's vid2vid Technique( ...

  6. 《自拍教程52》Python_adb运行Shell脚本

    Android作为一款Linux终端,肯定是支持.sh后缀的Shell脚本的运行的, 有时候测试环境准备或者长时间截取复杂的日志等,开发会给到一些Shell脚本. Shell脚本的执行的优势: 快捷高 ...

  7. [HDU2072]单词数<字符串>

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2072 Problem Description lily的好朋友xiaoou333最近很空,他想了一件没有什 ...

  8. 读者来信 | 设置HBase TTL必须先disable表吗?(已解决)

    今日有朋友加好友与我探讨一些问题,我觉得这些问题倒挺有价值的:于是就想在本公众号开设一个问答专栏,方便技术交流与分享,专栏名就定为:<读者来信>.如遇到本人能力有限难以解决的问题,该贴将会 ...

  9. SSM随笔

    1.搭建基本web项目2.在WEB-INF下面添加lib和classes包,并修改路径3.拷贝jar包 主要包括spring包+spring依赖包+myBatis包+mysql驱动包4.编辑sprin ...

  10. ANTLR随笔(一)

    学习背景 最近做项目需要开发一个类似Graphql的简单版的自定义查询功能. 功能主要是通过前端自定义的复查询条件来控制后端的查询字段以及最终返回的JSON格式. 最初准备直接使用Graphql实现但 ...