同步容器:

  • Vector/Hashtable:jdk1.0就已经存在,jdk1.2改写实现List/Map接口。作为ArrayList/HashMap在并发场景中的替代类出现。注意:Hashtable的API中已经建议用ConcurrentHashMap替代Hashtable。
  • SynchronizedSet/SynchronizedMap/SynchronizedList:Collections类生成的实现Set/Map/List接口的线程安全类,通过声明互斥锁,为所有线程不安全的操作加锁。注意:三个类的iterator仍然不是线程安全的,使用时需要额外加锁。
  • ConcurrentHashMap:线程安全的HashMap,所有线程安全实现都被封装,为了提高并发性能,内部实现非常精彩,之后会单独开一个帖子专门说一下。
  • CopyOnWriteArrayList:线程安全的ArrayList,所有写操作都通过“加锁-拷贝数据-修改-覆盖数据-解锁”的方式进行,操作非常消耗资源,但保证了读操作不需要加锁,因此适合读操作远多于写操作的场景。
  • ConcurrentLinkedQueue:线程安全的队列(FIFO)。
  • LinkedBlockingQueue:阻塞队列,提供可阻塞的take和put方法,当队列空时,take方法阻塞至队列非空;当队列满时,put方法阻塞至队列不满。
  • ConcurrentLinkedDeque:线程安全的双端队列。
  • LinkedBlockingQueue:阻塞双端队列。提供可阻塞的takeFirst/takeLast/putFirst/putLast方法。

同步器:

  • CountDownLatch:闭锁,类似发令枪,所有线程在起跑线等待闭锁发出起跑信号,一起出发。
  • Semaphore:计数信号量,类似许可证,线程执行需要获得许可证,执行结束需要返还许可证,当没有许可证可以发放时,线程将被阻塞直到别的线程返还了许可证。
  • CyclicBarrier:关卡,类似龙珠,每个线程成功执行都会获得一颗龙珠,所有线程全部成功执行就可以召唤神龙,如果有一个线程执行失败,所有线程都将失败。

版权声明:本文为博主原创文章,未经博主允许不得转载.

Java Concurrent包初探的更多相关文章

  1. java concurrent包的学习(转)

    java concurrent包的学习(转) http://my.oschina.net/adwangxiao/blog/110188 我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常 ...

  2. 利用java concurrent 包实现日志写数据库的并发处理

    一.概述 在很多系统中,往往需要将各种操作写入数据库(比如客户端发起的操作). 最简单的做法是,封装一个公共的写日志的api,各个操作中调用该api完成自己操作日志的入库.但因为入数据库效率比较低,如 ...

  3. java Concurrent包学习笔记(一):ExecutorService

    一.介绍 ExecutorService是java.util.concurrent包中的一个线程池实现接口.其有两个实现类: 1)ThreadPoolExecutor:普通线程池通过配置线程池大小,能 ...

  4. java concurrent包的实现原理

      由于java的CAS同时具有 volatile 读和volatile写的内存语义,因此Java线程之间的通信现在有了下面四种方式:   A线程写volatile变量,随后B线程读这个volatil ...

  5. java Concurrent包学习笔记(四):BlockingQueue

    一.BlockingQueue概述 1.阻塞的含义 BlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻塞队列的访问可能会造成阻塞.被阻塞的情况主要有如下两种: ,当一个线程对 ...

  6. java Concurrent包学习笔记(六):Exchanger

    一.概述 Exchanger 是一个用于线程间协作的工具类,Exchanger用于进行线程间的数据交换,它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据.这两个线程通过exchange 方法 ...

  7. java Concurrent包学习笔记(五):Semaphore

    一.Semaphore 是什么  信号量Semaphore是一个并发工具类,用来控制可同时并发的线程数,其内部维护了一组虚拟许可,构造函数初始化的时候可以指定许可的总数量 每次线程执行操作时先通过ac ...

  8. java Concurrent包学习笔记(三):ReentrantLock

    一.可重入性的理解 从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大.两者都是同一个线程每进入一次,锁 ...

  9. java Concurrent包学习笔记(二):CountDownLatch和CyclicBarrier

    一.CountDownLatch CountDownLatch一个线程同步的工具,是的一个或者多个线程等待其他线程操作完成之后再执行. CountDownLatch通过一个给定的数值count来进行初 ...

随机推荐

  1. Qt之QListWidget:项目的多选与单选设置

    2019独角兽企业重金招聘Python工程师标准>>> #include "widget.h" #include <QApplication> #in ...

  2. TreeMap分析(中)

    通过上篇文章,大家已经能够理解红黑树的基础数据结构,那么这篇文章就来分析下,在红黑树中插入一个结点后,内部数据结构发生了哪些变化. TreeMap插入某个结点的源码分析 /** * 插入节点,并平衡红 ...

  3. angular2相关

    脚手架安装一个项目 1.全局安装angular脚手架 npm install -g @angular/cli 2.初始化一个文件夹 ng new my-angular-demo 3.进入文件夹 cd ...

  4. C++编程入门题目--No.4

    题目: 输入某年某月某日,判断这一天是这一年的第几天? 程序分析: 以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天. #incl ...

  5. 数学--数论--HDU6919 Senior PanⅡ【2017多校第九场】

    Description 给出一个区间[L,R][L,R],问该区间中所有以KK作为最小因子(大于11的)的数字之和 Input 第一行输入一整数TT表示用例组数,每组用例输入三个整数L,R,KL,R, ...

  6. python(open 文件)

    一.open 文件 1.open('file','mode')打开一个文件 file 要打开的文件名,需加路径(除非是在当前目录) mode 文件打开的模式 需要手动关闭 close 2.with o ...

  7. Nginx模块开发(5)————开发简单的HTTP过滤模块

    该模块可实现如下的功能,在浏览器输入http://你的IP/lcw.text,能够读出你在根目录下创建的lcw.txt里面的内容,并在前面加上一句字符串where there is a will,th ...

  8. mysql5.7 修改密码,修改权限

    1.修改数据库对指定用户和ip权限 a. IP为192.168.0.1的用户jack拥有对数据库datebase的表table的 增删改查权限, ,连接密码为password grant select ...

  9. 面试之JS深拷贝的实现

    在面试中你是否遇到过如下场景: Q:小朋友,你是否了解如何拷贝一个对象? R:此时,机智的你可能会想到 Object.assign({}, obj); Q:那如何深拷贝一个对象呢? R:机智的你 JS ...

  10. P1353 Running S

    题意:https://www.luogu.com.cn/problem/P1353 奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行 n 分钟的晨跑.在每分钟的开始 ...