Java 并发 —— Java 标准库对并发的支持及 java.util.concurrent 包
0. Collections.synchronizedXxx()
Java 中常用的集合框架中的实现类:HashSet/TreeSet、ArrayList/LinkedList、HashMap/TreeMap 都不是线程安全的。即如果存在多个线程访问它们,并且有超过一个的线程试图修改它们,便存在线程安全的问题:
Collection c = Collections.synchronizedCollection(new ArrayList());
List list = Collections.synchronizedList(new ArrayList());
Set s = Collections.synchronizedSet(new HashSet());
Map m = Collections.synchronizedMap(new HashMap());
1. 注意
使用 java.util.concurrent.*下的类并非万事大吉
ConcurrentHashMap、synchronized与线程安全
使用 hashmap 做字符串的次数统计,为保证容器的线程安全,在修改容器内容时,加锁,在java中即是通过 synchronized 的关键字实现加锁。
public class ConcurrentMapTest
{private HashMap<String, Integer> map = new HashMap<>();public synchronized void add(String key){Integer value = map.get(key);if (value == null){// 也可通过 map.containsKey(key) 进行判断map.put(key, 1);}else{map.put(key, value+1);}}
}
如果我们使用 ConcurrentHashMap 是不是就可以避免 synchronized 关键字的使用了呢?
public class ConcurrentMapTest
{private ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();public void add(String key){if (!map.containsKey(key)){map.put(key, 1);}else{map.put(key, map.get(key)+1);}}
}
注意,map.put(key, map.get(key)+1) 实际上执行了至少三个原子操作:
- map.get
- value + 1
- map.put
因此其 add 方法仍需被 synchronized 关键字修饰。
Java 并发 —— Java 标准库对并发的支持及 java.util.concurrent 包相关推荐
- Java高并发编程学习(三)java.util.concurrent包
简介 我们已经学习了形成Java并发程序设计基础的底层构建块,但对于实际编程来说,应该尽可能远离底层结构.使用由并发处理的专业人士实现的较高层次的结构要方便得多.要安全得多.例如,对于许多线程问题,可 ...
- 【ArrayList】为什么java.util.concurrent 包里没有并发的ArrayList实现?
2019独角兽企业重金招聘Python工程师标准>>> 为什么java.util.concurrent 包里没有并发的ArrayList实现? 问:JDK 5在java.util.c ...
- 高并发编程基础(java.util.concurrent包常见类基础)
JDK5中添加了新的java.util.concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法 ...
- java.util.concurrent包API学习笔记
newFixedThreadPool 创建一个固定大小的线程池. shutdown():用于关闭启动线程,如果不调用该语句,jvm不会关闭. awaitTermination():用于等待子线程结束, ...
- java.util.concurrent包
本文是我们学院课程中名为Java Concurrency Essentials的一部分 . 在本课程中,您将深入探讨并发的魔力. 将向您介绍并发和并发代码的基础知识,并学习诸如原子性,同步和线程安全之 ...
- java.util.concurrent 包下面的所有类
java.util.concurrent 包下面的所有类 原子操作数类: java.util.concurrent.atomic.AtomicBoolean.class java.util.concu ...
- 【C++标准库】并发
高级接口async()和future /* The following code example is taken from the book * "The C++ Standard Lib ...
- java stl stack_C++标准库之stack
C++库以提供"模板"为主.所谓模板,是指不必预先制定类型的函数或类.我们可以借助STL(标准模板库 Standard Template Library, STL)提供的高效算法来 ...
- java.util.concurrent包详细分析--转
原文地址:http://blog.csdn.net/windsunmoon/article/details/36903901 概述 Java.util.concurrent 包含许多线程安全.测试良好 ...
最新文章
- 2014年秋广州华师在线计算机的作业答案,18秋华师《C语言程序设计B》在线作业-4辅导资料...
- Winsock—I/O模型之选择模型(一)
- golang中的mysql类型对应
- BZOJ5102 POI2018Prawnicy(堆)
- 一篇文章入门深度学习框架PyTorch
- 「Swift」Swift与C++和Python
- istringstream字符串流,实现类似字符串截取的功能,字符串流中的put,str()将流转换成为字符串string
- python读取写入文件_Python文件读写保存操作
- python获取键盘按键键值_python获取键盘输的值
- [转载] 比较器(Comparable和Comparator)、自然排序、定制排序
- c语言图书信息管理系实验心得,C语言图书信息管理系统实验报告.doc
- 反编译 - ILSpy的使用方法(看Unity源代码的方法)
- HTML与CSS重构网易严选页面
- Linux 字体存放位置及字体安装
- Jmeter javax.swing.text.BadLocationException: Position not represented by view 解决方法
- 绝不手软!严厉打击抄袭行为
- 校园 爆料 开怀一笑
- 如何反编译pyc文件查看源代码
- 电子科大自考c语言试题,220名北京考生赶考国科大 面试题目无刚性答案
- 2023年天津财经大学珠江学院专升本管理学原理专业考试大纲
热门文章
- jquery跨域调用webService
- 使用jQuery Mobile快速开发手机站点
- C#异步方法调用(四大方法详解)
- Spark Streaming之Window Operations操作和解析
- 在Linux集群上部署Spark之前准备
- 西安石油大学计算机类分专业,西安石油大学2019年分专业录取分数解读
- caffe-yolov3:编译安装报错:fatal error: caffe/caffe.hpp: No such file or directory
- 【VS】项目属性配置(上)
- 浅谈堆栈问题-C++
- 【OpenCV】透视变换 Perspective Transformation