码迷,mamicode.com
首页 > 其他好文 > 详细

七、并发容器ConcurrentHashMap

时间:2018-12-23 20:50:27      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:ted   doc   interrupt   oid   示例   jdk   china   col   style   

一、简介

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

 

七、并发容器ConcurrentHashMap

标签:ted   doc   interrupt   oid   示例   jdk   china   col   style   

原文地址:https://www.cnblogs.com/lay2017/p/10165420.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!