范例1:

package com.contoso;

import java.util.Random;

import java.util.UUID;

import java.util.concurrent.ConcurrentHashMap;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

public class ConcurrentHashMapExample1 {

/**

* ConcurrentHashMap的并发访问.

*

* ConcurrentHashMap使用的是区间(或称分段)锁,锁定它里面存储的全部键-值对

*

* 区间锁通过几个锁来划分被保护的区域

*

* - 不需要抛ConcurrentModificationException

*

* - ConcurrentHashMap的size() 和 isEmpty() 可能是不正确的, 不要信赖它们

*

* - ConcurrentHashMap支持原子操作, 不需要客户端锁定

*

* - 读取数据可以并发访问ConcurrentHashMap, 它的迭代器具有弱一致性

*

* - 只有少数几个写操作可以同时修改ConcurrentHashMap

*/

public static void useConcurrentHashMap() {

System.out.println("=== ConcurrentHashMap ===");

ExecutorService executor = Executors.newCachedThreadPool();

Random random = new Random();

ConcurrentHashMap map = new ConcurrentHashMap();

// putIfAbsent是原子操作

// 如果key对应的值value不存在就put,且返回null;

// 如果key对应的值value已存在,则返回已存在的值,且value不能为null,否则会报空指针异常。

map.putIfAbsent(UUID.randomUUID(), random.nextInt(50));

// 模拟并发访问 - 插入不重复的键-值对

for (int i = 0; i < 100; i++) {

if (i % 3 == 0) {

// 写操作

executor.execute(() -> {

UUID key = UUID.randomUUID();

Integer value = random.nextInt(100);

System.out.println("Write " + key + " : " + value);

map.putIfAbsent(key, value);

});

} else {

// 读操作

executor.execute(() -> System.err.println("Read " + map.values().toString()));

}

}

executor.shutdown();

}

public static void main(String[] args) {

useConcurrentHashMap();

}

}

run:

=== ConcurrentHashMap ===

Write c93da429-fdd8-4281-a5e2-69834c6af413 : 41

Read [41, 15]

Read [41, 15]

Read [41, 15]

Read [41, 15]

Write b75e309a-e2e3-4683-a04c-3a90b240ce01 : 31

Read [41, 31, 15]

Write b35b76b4-1638-418f-a635-d4e3f2fe64c7 : 19

Read [41, 19, 31, 15]

Write 1742a44d-049b-4d85-9c49-9bf047216d69 : 48

Read [48, 41, 19, 31, 15]

Read [48, 41, 19, 31, 15]

Read [48, 41, 19, 31, 15]

Read [48, 41, 19, 31, 15]

Read [48, 41, 19, 31, 15]

Read [48, 41, 19, 31, 15]

Write f90e60f0-dddb-4c09-ab0f-c43a1eb98a6e : 36

Read [48, 41, 19, 31, 15, 36]

Read [48, 41, 19, 31, 15, 36]

Read [48, 41, 19, 31, 15, 36]

Read [48, 41, 19, 31, 15, 36]

Write 2d6a2f8b-2404-4847-8bfb-cb5a7cd0b4ab : 24

Read [48, 41, 19, 24, 31, 15, 36]

Read [48, 41, 19, 24, 31, 15, 36]

Write 466ddf0c-7860-410c-8ca1-811a66ba4647 : 10

Read [48, 41, 19, 24, 31, 15, 10, 36]

Read [48, 41, 19, 24, 31, 15, 10, 36]

Read [48, 41, 19, 24, 31, 15, 10, 36]

Read [48, 41, 19, 24, 31, 15, 10, 36]

Write 29008ef0-9ccd-4a1d-9095-a06bdbd88f47 : 10

Read [48, 10, 41, 19, 24, 31, 15, 10, 36]

Read [48, 10, 41, 19, 24, 31, 15, 10, 36]

Read [48, 10, 41, 19, 24, 31, 15, 10, 36]

Read [48, 10, 41, 19, 24, 31, 15, 10, 36]

Read [48, 10, 41, 19, 24, 31, 15, 10, 36]

Read [48, 10, 41, 19, 24, 31, 15, 10, 36]

Write 3519230b-2481-463d-a8ff-af5ed544e225 : 30

Read [48, 10, 41, 19, 24, 31, 15, 10, 36]

Write 1f63fefa-bdbb-4a2b-a842-aea424044df0 : 45

Read [48, 10, 41, 19, 24, 31, 15, 10, 45, 36, 30]

Read [48, 10, 41, 19, 24, 31, 15, 10, 45, 36, 30]

Write c41082e0-135a-4e27-bbb2-36c8f1e80807 : 13

Write 6eeb2c87-46c8-4d1e-8637-438730c350ef : 46

Read [48, 10, 46, 10, 36, 30, 41, 19, 24, 13, 31, 15, 45]

Read [48, 10, 46, 10, 36, 30, 41, 19, 24, 13, 31, 15, 45]

Read [48, 10, 46, 10, 36, 30, 41, 19, 24, 13, 31, 15, 45]

Write d310bc76-ad74-48f7-b2d3-11c4cf84743b : 18

Read [48, 10, 46, 10, 18, 36, 30, 41, 19, 24, 13, 31, 15, 45]

Read [48, 10, 46, 10, 18, 36, 30, 41, 19, 24, 13, 31, 15, 45]

Read [48, 10, 46, 10, 18, 36, 30, 41, 19, 24, 13, 31, 15, 45]

Write 37cc879d-693f-49f0-8120-94a742a94df8 : 0

Read [48, 10, 46, 0, 10, 18, 36, 30, 41, 19, 24, 13, 31, 15, 45]

Read [48, 10, 46, 0, 10, 18, 36, 30, 41, 19, 24, 13, 31, 15, 45]

Write 898596de-9211-4f5a-bba4-f089eaec5102 : 47

Read [48, 10, 46, 0, 10, 18, 36, 30, 47, 41, 19, 24, 13, 31, 15, 45]

Read [48, 10, 46, 0, 10, 18, 36, 30, 47, 41, 19, 24, 13, 31, 15, 45]

Write 0e8d4fa4-d242-4bda-9be9-f771c14e6dcd : 40

Read [48, 10, 46, 0, 10, 18, 36, 30, 47, 41, 19, 24, 13, 31, 15, 45]

Read [48, 10, 46, 0, 40, 10, 18, 36, 30, 47, 41, 19, 24, 13, 31, 15, 45]

Write efa71463-55d1-4668-8847-6085a9eee869 : 1

Read [48, 10, 46, 0, 40, 10, 18, 36, 30, 47, 41, 19, 24, 13, 31, 15, 45]

Read [48, 10, 46, 0, 40, 10, 18, 36, 30, 47, 41, 19, 24, 13, 1, 31, 15, 45]

Read [48, 10, 46, 0, 40, 10, 18, 36, 30, 47, 41, 19, 24, 13, 1, 31, 15, 45]

Write 420addc9-4e89-4630-b1d6-bc97af487dc6 : 38

Write 621a6d92-e46a-431a-a66e-59173a97efb4 : 34

Read [48, 10, 34, 46, 0, 40, 10, 18, 36, 30, 47, 41, 38, 19, 24, 13, 1, 31, 15, 45]

Write eb3dfcbd-2b1b-453c-9213-df871784321f : 28

Read [48, 10, 34, 46, 0, 40, 10, 18, 36, 30, 47, 41, 38, 19, 24, 13, 1, 31, 15, 45]

Read [48, 10, 34, 46, 0, 28, 40, 10, 18, 36, 30, 47, 41, 38, 19, 24, 13, 1, 31, 15, 45]

Write 7dd73bd6-24b0-46c6-b641-9d1b4ce1de5a : 46

Write 054deb2d-4806-4a3b-a525-b3076c7a1a4e : 22

Read [48, 10, 34, 46, 0, 28, 40, 10, 18, 36, 30, 47, 41, 38, 46, 19, 24, 13, 1, 31, 15, 45]

Write 1e3f6c76-952a-421b-ad0d-8785b2ce4cf8 : 22

Write b221c6cc-a095-483c-b84b-778a40729305 : 14

Read [10, 22, 0, 10, 22, 18, 36, 47, 41, 46, 13, 45, 48, 34, 46, 28, 40, 30, 38, 19, 24, 1, 31, 15]

Write ae961f26-72f5-456e-8af3-75f6d5c605ac : 6

Write 7e143d8d-6449-4bc5-883a-a4637014279e : 5

Read [10, 6, 22, 5, 0, 10, 22, 18, 36, 47, 41, 46, 13, 45, 48, 34, 46, 28, 40, 30, 14, 38, 19, 24, 1, 31, 15]

Write a6c0656c-dfe3-475a-b917-10c085f7f0a1 : 14

Read [10, 6, 22, 5, 0, 10, 22, 18, 36, 47, 41, 46, 13, 45, 48, 34, 46, 28, 40, 30, 14, 38, 19, 24, 1, 31, 15]

Write e0e181b4-9bf8-4527-b24d-529c1daa6724 : 46

Read [10, 6, 22, 5, 0, 10, 22, 18, 36, 47, 41, 46, 13, 45, 48, 34, 46, 28, 40, 30, 14, 38, 19, 24, 1, 31, 15]

Write b2d3447b-6aee-4519-9cd7-6a9e3f64cf90 : 10

Write 762264dc-b6ca-46d9-90f8-f1dc064cd350 : 49

Read [10, 6, 22, 5, 0, 10, 22, 18, 36, 47, 41, 46, 13, 45, 48, 34, 46, 28, 40, 30, 14, 38, 19, 24, 1, 31, 15]

Write cd9f2991-1637-45f4-87b1-d796e58e0162 : 34

Write f8b94329-1d52-4bc8-b83d-3da25580b243 : 26

Write 5575c2e6-96e8-4f1f-b09b-6ab73009e244 : 46

Read [10, 6, 22, 5, 0, 10, 22, 18, 36, 47, 41, 46, 13, 45, 48, 34, 46, 28, 40, 30, 14, 38, 19, 24, 1, 31, 15]

Write aa421a55-bb91-489b-9de7-caf7550d2150 : 31

Read [10, 6, 22, 5, 0, 10, 22, 18, 36, 47, 14, 41, 46, 13, 45, 48, 34, 46, 28, 40, 30, 14, 38, 19, 24, 1, 31, 15]

Read [10, 6, 22, 5, 0, 10, 22, 18, 36, 47, 14, 41, 46, 13, 45, 48, 34, 46, 28, 40, 30, 14, 38, 19, 24, 1, 31, 15]

Read [10, 6, 22, 5, 0, 10, 22, 18, 36, 47, 14, 41, 46, 13, 45, 48, 34, 46, 28, 40, 30, 14, 38, 19, 24, 1, 31, 15]

Read [10, 6, 22, 5, 0, 10, 22, 18, 36, 47, 14, 41, 46, 13, 45, 48, 34, 46, 28, 40, 30, 14, 38, 19, 24, 1, 31, 15]

Read [10, 6, 22, 5, 0, 10, 22, 18, 36, 47, 14, 41, 46, 13, 45, 48, 34, 46, 28, 40, 30, 14, 38, 19, 24, 1, 31, 15]

Read [10, 6, 22, 5, 0, 10, 22, 18, 36, 47, 14, 41, 46, 46, 13, 45, 48, 34, 46, 28, 40, 30, 14, 38, 19, 24, 1, 31, 15]

Read [10, 6, 22, 5, 0, 10, 22, 18, 36, 47, 14, 41, 46, 49, 46, 13, 45, 48, 34, 10, 46, 28, 40, 30, 14, 38, 19, 24, 1, 31, 15]

Read [10, 6, 22, 5, 0, 10, 22, 18, 36, 47, 14, 41, 46, 49, 46, 13, 45, 48, 34, 10, 46, 28, 40, 30, 14, 38, 19, 24, 1, 31, 15]

Read [10, 6, 22, 5, 34, 0, 10, 22, 18, 36, 47, 14, 41, 46, 49, 46, 26, 13, 45, 48, 34, 10, 46, 28, 40, 30, 14, 38, 19, 24, 1, 31, 15]

Read [10, 6, 46, 22, 5, 34, 0, 10, 22, 18, 36, 47, 14, 41, 46, 49, 46, 26, 13, 45, 48, 34, 10, 46, 28, 40, 30, 14, 38, 19, 24, 1, 31, 15]

BUILD SUCCESSFUL (total time: 1 second)

java 多线程操作map_Java 多线程中ConcurrentHashMap并发读写操作范例相关推荐

  1. python中的文件读写操作

    python中的文件读写操作 思维导图 Python读写CSV文件 csv文件是什么? CSV(Comma Separated Values)全称逗号分隔值文件是一种简单.通用的文件格式,被广泛的应用 ...

  2. 【Java】JUC(java.util.concurrent)工具包中的并发相关

    目录 一.AQS详解 AQS原理 AQS 对资源的共享方式 AQS 底层使用了模板方法模式 AQS具体应用举例 ReentrantLock CountDownLatch 二.ConcurrentHas ...

  3. java map扩容机制_java中ConcurrentHashMap的扩容机制是怎样的?详细解析

    大家都知道java中有很多的基础知识,需要大家花费一定的时间去消化.关于java中ConcurrentHashMap 的扩容机制不知道大家是否了解过,其实内容也是很好理解的,一起来看看吧. 首先,我们 ...

  4. java map操作_Java 8 中的 Map 骚操作,学习下!

    怎么用? 简介 使用场景 其他 总结 Java 8最大的特性无异于更多地面向函数,有时约会了等,可以更好地进行函数式编程. 前段时间无意间发现了方法,感觉还是很好用的,此文简单做一些相关介绍.首先我们 ...

  5. C++中的文件读写操作(1)

    #include "iostream" #include "fstream" #include "vector" #include &quo ...

  6. golang中map并发读写问题及解决方法

    这是一个创建于 2017-03-05 06:02:54 的文章,其中的信息可能已经有所发展或是发生改变. 一.map并发读写问题 如果map由多协程同时读和写就会出现 fatal error:conc ...

  7. Android中的文件读写操作

    在android开发中文件操作使用的其实还是比较高频的,之前我遇到这种需求都随便写写,对此没有一个比较全面的认识,所以想借这篇文章来梳理一遍. 由于需要读写文件,这包含了读写外部sd card的文件, ...

  8. Python中文件的读写操作

    文章目录 一.文件操作 open(参数1,参数2, 参数3...) - 打开文件,打开的是一个文件对象. 参数1:路径和文件名 参数2:r.a.w.+等 参数3:encoding = 'utf-8' ...

  9. python sqlserver 数据操作_python对Excel数据进行读写操作

    python对Excel数据进行读写操作 将学习到的基础操作记录在这里,便与复习查看 1.python读取Excel工作簿.工作表 import xlrd # 读取工作簿 wb=xlrd.open_w ...

最新文章

  1. elasticsearch和hadoop集成,gateway.type hdfs设置
  2. Github Star 11.5K项目再发版:AAAI 2021 顶会论文开源,80+多语言模型全新升级
  3. JAVA-JAVA WEB开发工具下载与安装
  4. 在CentOS6.2下安装DNS服务软件Bind并快速配置简单实例
  5. java保留二位小数_java使double保留两位小数的多方法 java保留两位小数
  6. ssms 连接 ssis_在SSMS中手动设置SSIS包加密
  7. 已遭利用的微软0day CVE-2020-1464,原来是两年前的老相识
  8. dqn在训练过程中loss越来越大_强化学习笔记:OpenAI Gym+DQN+Tensorflow2实现
  9. 阿里云爬虫风险管理产品商业化,为云端流量保驾护航 1
  10. 为什么会找不到D层文件?
  11. 全国计算机二级java刷题软件_你知道的计算机二级刷题软件
  12. 曹鹏CSS视频教程 编程之邦
  13. D. Aerodynamic(思维+计算几何判中心对称图形)
  14. 关于环信客服的集成与使用
  15. html怎么去除照片背景颜色,怎么去掉背景色?
  16. iPhone苹果手机语音备忘录M4A文件损坏显示时长无法播放修复方法
  17. StringTokenizer是什么
  18. Android 推送-个推
  19. 传众安保险约1亿美元投资轻松筹,疏远阿里,倒向腾讯?
  20. jeecgBoot 状态默认设置

热门文章

  1. Python3爬取豆瓣图书Top250并写入txt文件当中
  2. arcengine 图层中节点抽稀功能(c++)
  3. Linux网络防火墙:iptables与netfilter
  4. 服务器体系(SMP, NUMA, MPP)与共享存储器架构(UMA和NUMA)
  5. MongoDB 教程 | 菜鸟教程
  6. BPF(BSD Packet Filter)
  7. python中两个集合的运算并交补_三种方式实现 Python 中的集合的交、并、补运算...
  8. element table批量删除_element 表格批量删除
  9. python简单实践作业_【Python】:简单爬虫作业
  10. ethtool -g rx_魔兽怀旧服:黑G团避坑指南