Java基础(十二)----concurrentHashMap与线程池
来源:互联网 发布:专业 知乎 编辑:程序博客网 时间:2024/06/06 08:41
一、 concurentHashMap
1、 hashmap、hashtable、concurrentHashMap
hashmap: 非线程安全的
hashtable: 线程安全的,通过锁定整个map来保证线程安全,效率低下
concurrentHashMap: 线程安全的,一个concurrentHashMap中有多个锁,每次操作时,只能保证单次操作的原子性,如: 单次put或单次get,如果put和get同时需要保证原子性,则concurrentHashMap无法保证,必须用其他方法(synchronized)
package test;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class Test { public static void main(String[] args) throws InterruptedException { for (int i = 0; i < 8; i++) { System.out.println(test()); } } private static int test() throws InterruptedException { ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>(); ExecutorService pool = Executors.newCachedThreadPool(); for (int i = 0; i < 8; i++) { pool.execute(new MyTask(map)); } // 线程池关闭操作 pool.shutdown(); pool.awaitTermination(1, TimeUnit.DAYS); return map.get(MyTask.KEY); }}class MyTask implements Runnable { static Object lock = new Object(); static final String KEY = "key"; ConcurrentHashMap<String, Integer> map; public MyTask(ConcurrentHashMap<String, Integer> map) { this.map = map; } @Override public void run() { for (int i = 0; i < 100; i++) { synchronized (lock) { addup(); } } } private void addup() { if (!map.containsKey(KEY)) map.put(KEY, 1); else map.put(KEY, map.get(KEY) + 1); }}
concurrentHashMap源码解析
源码
浅析HashMap与ConcurrentHashMap的线程安全性
阅读全文
0 0
- Java基础(十二)----concurrentHashMap与线程池
- Java线程和多线程(十二)——线程池基础
- 黑马程序员-----java基础十二(java之多线程)
- java基础--hashTable与concurrentHashMap的比较
- java(十二):线程池和ThreadPoolExecutor
- java并发编程(二十二)----(JUC集合)ConcurrentHashMap介绍
- Java基础-了解ConcurrentHashMap
- java基础之ConcurrentHashMap
- 简谈JAVA基础--ConcurrentHashMap
- ConcurrentHashMap、synchronized与线程安全
- ConcurrentHashMap、synchronized与线程安全
- ConcurrentHashMap、synchronized与线程安全
- ConcurrentHashMap、synchronized与线程安全
- ConcurrentHashMap、synchronized与线程安全
- ConcurrentHashMap、synchronized与线程安全
- ConcurrentHashMap、synchronized与线程安全
- JAVA基础学习(十二)--多线程一线程之间的通信
- (十二)java并发编程--线程优先级
- QT之qss教程-QToolBar
- mybaties 一对多 list<String> 返回数据
- Qt之进程间通信(QProcess)
- jsp trimDirectiveWhitespaces ="true"
- AS调试opencv示例代码,尝试解决camera2包报错的问题
- Java基础(十二)----concurrentHashMap与线程池
- 加载spring上下文 工具类
- 可随意移动子VIEW的布局文件
- 简单创建spring boot 项目。
- Unity5之Network基础用法之人物跑动同步
- Java的native方法
- LTE物理传输资源(3)-时频资源
- 文件下载利用poi导出excel
- 宿主机为win10,虚拟机为 win7系统下载及安装virtio-drivers网卡驱动, 以提高网