当前位置: 首页 > news >正文

七、并发容器ConcurrentHashMap

一、简介

我们知道,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");
    }
}

 

转载于:https://www.cnblogs.com/lay2017/p/10165420.html

相关文章:

  • TensorFlow安装
  • geowebcache1.14.1配置arcgislayer启动报错的解决
  • Python数据预处理:机器学习、人工智能通用技术(1)
  • 三大NoSQL数据库HBase、Cassandra和MongoDB大比拼
  • 面试最常问的tcp三次握手策略
  • 电子邮件加密:PGP 和S/MIME加密的区别
  • 4.2Python数据类型(2)之布尔类型
  • 新年购机首选,全能旗舰华为Mate 20 X让你大胆出去high!
  • 一次 Java 内存泄漏排查过程,涨姿势
  • git删除忽略文件.idea
  • 分块⑨题
  • Django admin 后台管理
  • 完美解决 No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android...
  • 使用javascript连接mqtt协议(自动重连问题)
  • serde
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [Vue CLI 3] 配置解析之 css.extract
  • Android开源项目规范总结
  • classpath对获取配置文件的影响
  • crontab执行失败的多种原因
  • CSS相对定位
  • Java精华积累:初学者都应该搞懂的问题
  • js如何打印object对象
  • Promise面试题,控制异步流程
  • Python学习笔记 字符串拼接
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Zsh 开发指南(第十四篇 文件读写)
  • 二维平面内的碰撞检测【一】
  • 猴子数据域名防封接口降低小说被封的风险
  • 面试遇到的一些题
  • 普通函数和构造函数的区别
  • 小程序开发中的那些坑
  • 智能网联汽车信息安全
  • 白色的风信子
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $.ajax,axios,fetch三种ajax请求的区别
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (六)软件测试分工
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (全注解开发)学习Spring-MVC的第三天
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (轉)JSON.stringify 语法实例讲解
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET 8.0 发布到 IIS
  • .NET Core引入性能分析引导优化