同步容器:

  • 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. javascript-网页尺寸

    scrollWidth:对象的实际内容的宽度,不包边线宽度,会随对象中内容超过可视区后而变大. clientWidth:对象内容的可视区的宽度,不包滚动条等边线,会随对象显示大小的变化而改变. off ...

  2. Docker help详细帮助

    常用的 docker 命令 docker # docker 命令帮助 Commands: attach Attach to a running container # 当前 shell 下 attac ...

  3. Inno Setup 大师 Tlama

    https://stackoverflow.com/users/960757/tlama

  4. POJ2044 天气预报---状态细则

    墙角数枝梅,凌寒独自开. 遥知不是雪,为有暗香来.--王安石 题目:天气预报 网址:http://poj.org/problem?id=2044 你是一个可以控制降雨的神仙. 你是一个仁慈的神,希望土 ...

  5. Redis数据迁移的三个方法

    为什么80%的码农都做不了架构师?>>>   1. rdb数据备份恢复方法 redis 127.0.0.1:6379> SAVE OK 或者 redis-cli -h 127. ...

  6. FastJson踩坑:@JsonField在反序列化时失效

    问题描述 一个对象(某个字段为枚举类型,为了不采用默认的序列化过程,用@JSONField指定了序列化器和反序列器,过程见旧博文),将其放到JSONArray中再序列化JSONArray对象,用得到的 ...

  7. NodeJS实现websocket代理机制

    使用的模块 ws http http-proxy 主要通过htt-proxy实现中转 启动websocket服务 var WebSocketServer = require('ws').Server; ...

  8. C++条件分支结构

    一.对于近期学习知识点的摘要: 1. 从第一个.cpp文件谈起, #include<iostream> //头文件 using namespace std; //使用命名空间,namesp ...

  9. three.js中的矩阵变换(模型视图投影变换)

    目录 1. 概述 2. 基本变换 2.1. 矩阵运算 2.2. 模型变换矩阵 2.2.1. 平移矩阵 2.2.2. 旋转矩阵 2.2.2.1. 绕X轴旋转矩阵 2.2.2.2. 绕Y轴旋转矩阵 2.2 ...

  10. MODIS系列之NDVI(MOD13Q1)七:时间序列S-G滤波之Python

    时间序列S-G滤波之Python 根据上上篇博文(MODIS系列之NDVI(MOD13Q1)五:NDVI处理流程)做出的NDVI.我们求NDVI时间序列图,但该NDVI时序图为地表各土地类型综合的ND ...