一、简介

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

最新文章

  1. 一个前端程序猿的Sublime Text3的自我修养
  2. NSString属性什么时候用copy,什么时候用strong?
  3. Tomcat Server Timeouts属性的设置
  4. ubuntu 16.04软件源
  5. 新款F系列虚拟机
  6. 浅谈C#中ref与out的区别
  7. java数字字符串累加1的解决方案
  8. Doxygen + Graphviz windows下安装配置(图解)
  9. 第六届蓝桥杯软件类省赛题解C++/Java
  10. bzoj1227 组合数学+bit
  11. bootStrap-table服务器端后台分页的使用,以及自定义搜索框的实现,前端代码到数据查询超详细讲解
  12. idea编译错误提示编译版本不对,需要注意的配置
  13. 金融量化分析【day110】:NumPy-切片和索引
  14. 2018-2019-2 20165205 《网络对抗技术》 Exp6 信息收集与漏洞扫描
  15. 吴恩达机器学习笔记24-神经网络的模型表示1(Model Representation of Neural Network I)
  16. 第51节:Java当中的集合框架Map
  17. Vue(三)之前端路由
  18. fastjson序列化乱序问题
  19. 关于SQL Server将一列的多行内容拼接成一行,合并显示在另外表中
  20. [转]GAN论文集

热门文章

  1. java学习笔记—实现一个类MyInputStream(28)
  2. 【OCP-12c】2019年CUUG OCP 071考试题库(73题)
  3. bzoj 2244 [SDOI2011]拦截导弹(dp+CDQ+树状数组)
  4. 脚本:定时释放 Linux/CentOS 缓存【转载自:杭州山不高】
  5. 爬虫实战1:使用requests和正则爬取电影信息
  6. JDK8的安装及环境配置
  7. Ionic2 自学须知的基本知识点
  8. .NET Core容器化之多容器应用部署-使用Docker-Compose
  9. 总结day1 ---- 基础内容学习 ,以及历史了解
  10. iOS学习笔记(8)——GCD初探