七、并发容器ConcurrentHashMap
2024-08-28 18:33:11
一、简介
我们知道,HashMap是线程不安全的。而HashTable是线程安全的,但是JDK已经不建议使用HashTable,它已经被作为废除的实现。
在JDK并发包里面,ConcurrentHashMap支持并发操作,并包括HashMap的方法。
JDK文档:http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/concurrent/ConcurrentHashMap.html
二、示例
以下示例,我们使用CountDownLatch模拟了多线程并发操作。
而ConcurrentHashMap的putIfAbsent方法,将if判断和put的复合操作通过加锁,形成了一个原子操作支持并发。
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CountDownLatch; public class ConcurrentHashMapDemo { public static ConcurrentHashMap<String, String> concurrentHashMap = new ConcurrentHashMap<>(); public static void main(String[] args) throws InterruptedException { CountDownLatch latch = new CountDownLatch(1); for (int i = 0; i < 10; i++) { new Thread(() -> { try { latch.await(); concurrentHashMap.putIfAbsent("threadName", Thread.currentThread().getName()); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()); }).start(); } // 让子线程都等待 Thread.sleep(10); // 并发执行 latch.countDown(); // 让子线程执行完毕 Thread.sleep(1000); System.out.println(concurrentHashMap); System.out.println("finished"); } }
最新文章
- 一个前端程序猿的Sublime Text3的自我修养
- NSString属性什么时候用copy,什么时候用strong?
- Tomcat Server Timeouts属性的设置
- ubuntu 16.04软件源
- 新款F系列虚拟机
- 浅谈C#中ref与out的区别
- java数字字符串累加1的解决方案
- Doxygen + Graphviz windows下安装配置(图解)
- 第六届蓝桥杯软件类省赛题解C++/Java
- bzoj1227 组合数学+bit
- bootStrap-table服务器端后台分页的使用,以及自定义搜索框的实现,前端代码到数据查询超详细讲解
- idea编译错误提示编译版本不对,需要注意的配置
- 金融量化分析【day110】:NumPy-切片和索引
- 2018-2019-2 20165205 《网络对抗技术》 Exp6 信息收集与漏洞扫描
- 吴恩达机器学习笔记24-神经网络的模型表示1(Model Representation of Neural Network I)
- 第51节:Java当中的集合框架Map
- Vue(三)之前端路由
- fastjson序列化乱序问题
- 关于SQL Server将一列的多行内容拼接成一行,合并显示在另外表中
- [转]GAN论文集
热门文章
- java学习笔记—实现一个类MyInputStream(28)
- 【OCP-12c】2019年CUUG OCP 071考试题库(73题)
- bzoj 2244 [SDOI2011]拦截导弹(dp+CDQ+树状数组)
- 脚本:定时释放 Linux/CentOS 缓存【转载自:杭州山不高】
- 爬虫实战1:使用requests和正则爬取电影信息
- JDK8的安装及环境配置
- Ionic2 自学须知的基本知识点
- .NET Core容器化之多容器应用部署-使用Docker-Compose
- 总结day1 ---- 基础内容学习 ,以及历史了解
- iOS学习笔记(8)——GCD初探