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 包相关推荐

  1. Java高并发编程学习(三)java.util.concurrent包

    简介 我们已经学习了形成Java并发程序设计基础的底层构建块,但对于实际编程来说,应该尽可能远离底层结构.使用由并发处理的专业人士实现的较高层次的结构要方便得多.要安全得多.例如,对于许多线程问题,可 ...

  2. 【ArrayList】为什么java.util.concurrent 包里没有并发的ArrayList实现?

    2019独角兽企业重金招聘Python工程师标准>>> 为什么java.util.concurrent 包里没有并发的ArrayList实现? 问:JDK 5在java.util.c ...

  3. 高并发编程基础(java.util.concurrent包常见类基础)

    JDK5中添加了新的java.util.concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法 ...

  4. java.util.concurrent包API学习笔记

    newFixedThreadPool 创建一个固定大小的线程池. shutdown():用于关闭启动线程,如果不调用该语句,jvm不会关闭. awaitTermination():用于等待子线程结束, ...

  5. java.util.concurrent包

    本文是我们学院课程中名为Java Concurrency Essentials的一部分 . 在本课程中,您将深入探讨并发的魔力. 将向您介绍并发和并发代码的基础知识,并学习诸如原子性,同步和线程安全之 ...

  6. java.util.concurrent 包下面的所有类

    java.util.concurrent 包下面的所有类 原子操作数类: java.util.concurrent.atomic.AtomicBoolean.class java.util.concu ...

  7. 【C++标准库】并发

    高级接口async()和future /* The following code example is taken from the book * "The C++ Standard Lib ...

  8. java stl stack_C++标准库之stack

    C++库以提供"模板"为主.所谓模板,是指不必预先制定类型的函数或类.我们可以借助STL(标准模板库 Standard Template Library, STL)提供的高效算法来 ...

  9. java.util.concurrent包详细分析--转

    原文地址:http://blog.csdn.net/windsunmoon/article/details/36903901 概述 Java.util.concurrent 包含许多线程安全.测试良好 ...

最新文章

  1. 2014年秋广州华师在线计算机的作业答案,18秋华师《C语言程序设计B》在线作业-4辅导资料...
  2. Winsock—I/O模型之选择模型(一)
  3. golang中的mysql类型对应
  4. BZOJ5102 POI2018Prawnicy(堆)
  5. 一篇文章入门深度学习框架PyTorch
  6. 「Swift」Swift与C++和Python
  7. istringstream字符串流,实现类似字符串截取的功能,字符串流中的put,str()将流转换成为字符串string
  8. python读取写入文件_Python文件读写保存操作
  9. python获取键盘按键键值_python获取键盘输的值
  10. [转载] 比较器(Comparable和Comparator)、自然排序、定制排序
  11. c语言图书信息管理系实验心得,C语言图书信息管理系统实验报告.doc
  12. 反编译 - ILSpy的使用方法(看Unity源代码的方法)
  13. HTML与CSS重构网易严选页面
  14. Linux 字体存放位置及字体安装
  15. Jmeter javax.swing.text.BadLocationException: Position not represented by view 解决方法
  16. 绝不手软!严厉打击抄袭行为
  17. 校园 爆料 开怀一笑
  18. 如何反编译pyc文件查看源代码
  19. 电子科大自考c语言试题,220名北京考生赶考国科大 面试题目无刚性答案
  20. 2023年天津财经大学珠江学院专升本管理学原理专业考试大纲

热门文章

  1. jquery跨域调用webService
  2. 使用jQuery Mobile快速开发手机站点
  3. C#异步方法调用(四大方法详解)
  4. Spark Streaming之Window Operations操作和解析
  5. 在Linux集群上部署Spark之前准备
  6. 西安石油大学计算机类分专业,西安石油大学2019年分专业录取分数解读
  7. caffe-yolov3:编译安装报错:fatal error: caffe/caffe.hpp: No such file or directory
  8. 【VS】项目属性配置(上)
  9. 浅谈堆栈问题-C++
  10. 【OpenCV】透视变换 Perspective Transformation