1. java.util.concurrent概述

JDK5.0以后的版本都引入了高级并发特性,大多数的特性在java.util.concurrent包中,是专门用于多线并发编程的,充分利用了现代多处理器和多核心系统的功能以编写大规模并发应用程序。主要包含原子量、并发集合、同步器、可重入锁,并对线程池的构造提供了强力的支持。

原子量,是定义了支持对单一变量执行原子操作的类。所有类都有get和set方法,工作方法和对volatile变量的读取和写入一样。

并发集合,是原有集合框架的补充,为多线程并发程序提供了支持。主要有:BlockingQueue,ConcurrentMap,ConcurrentNavigableMap。

同步器,提供了一些帮助在线程间协调的类,包括semaphores,barriers,latches, exchangers等。

Lock对象,一般同步代码依靠内部锁(隐式锁),这种锁易于使用,但是有很多局限性。新的Lock对象支持更加复杂的锁定语法。和隐式锁类似,每一时刻只有一个线程能够拥有Lock对象,通过与其相关联的Condition对象,Lock对象也支持wait和notify机制。

线程池,略

2. 原子量

无锁算法(nonblocking algorithms),使用低层原子化的机器指令,例如使用compare-and-swap(CAS)代替锁保证并发情况下数据的完整性。无锁算法广泛应用于操作系统与JVM中,比如线程和进程的调度、垃圾收集、实现锁和其他并发数据结构。

2.1 原子变量类

java.util.concurrent.atomic 包中提供了原子变量的几种实现,AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference<V>等等。

开发人员可以直接将原子变量用作共享计数器、序号生成器和其他独立共享变量的高性能替代,否则必须通过同步保护这些变量。

参考:Java:多线程,java.util.concurrent.atomic包之AtomicInteger/AtomicLong用法

3. 并发集合

3.1 Queue接口与BlockingQueue接口

java.util 包为集合提供了一个新的基本接口:java.util.Queue。具体内容可以参考:Java:集合,Collection接口框架图

java.util.concurrent包为集合提供了一个线程安全的接口:java.util.concurrent.BlockingQueue。具体内容可以参考:Java:集合,concurrent包下面的Collection接口框架图

继承于Queue接口的ConcurrentLinkedQueue类,以及实现BlockingQueue接口的五个队列类:ArrayBlockingQueue、LinkedBlockingQueue 、PriorityBlockingQueue、DelayQueue、SynchronousQueue的具体内容,请参考:Java:集合,concurrent包下面的Collection接口框架图

3.2 使用 ConcurrentMap 实现类

ConcurrentMap接口中定义的方法是原子性的。ConcurrentHashMap为其实现类。具体内容参考:Java:集合,concurrent包下面的Map接口框架图

3.3 CopyOnWriteArrayList 和 CopyOnWriteArraySet

参考:Java:集合,concurrent包下面的Collection接口框架图

4. 同步器

4.1 Semaphore
参考:
4.2 Barrier
参考:
4.3 CountDownLatch
参考:
4.4 Exchanger
参考:
4.5 Future和FutureTask
参考:

5. 显式锁

参考:

6. Fork-Join框架

在JDK1.7中,java.util.concurrent 包的新增功能之一是一个 fork-join 风格的并行分解框架。fork-join 概念提供了一种分解多个算法的自然机制,可以有效地应用硬件并行性。
个人不太看好此框架,先不做了解。
 

《Java Concurrency》读书笔记,使用JDK并发包构建程序的更多相关文章

  1. Java 并发编程实践基础 读书笔记: 第三章 使用 JDK 并发包构建程序

    一,JDK并发包实际上就是指java.util.concurrent包里面的那些类和接口等 主要分为以下几类: 1,原子量:2,并发集合:3,同步器:4,可重入锁:5,线程池 二,原子量 原子变量主要 ...

  2. java effective 读书笔记

    java effective 读书笔记 []创建和销毁对象 静态工厂方法 就是“封装了底层 暴露出一个访问接口 ” 门面模式 多参数时 用构建器,就是用个内部类 再让内部类提供构造好的对象 枚举 si ...

  3. 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域

    深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理 ...

  4. Java并发读书笔记:线程安全与互斥同步

    目录 导致线程不安全的原因 什么是线程安全 不可变 绝对线程安全 相对线程安全 线程兼容 线程对立 互斥同步实现线程安全 synchronized内置锁 锁即对象 是否要释放锁 实现原理 啥是重进入? ...

  5. 单元测试之道Java版——读书笔记

    单元测试知道Java版读书笔记 首先我们必须要知道我们所写的代码,它的功能是什么,如果我们不了解代码的行为,那么也就无从测试. 我们测试的目的,是为了我们整个程序架构的稳定,代码其实就是欧文要实现功能 ...

  6. 《黑客攻防技术宝典Web实战篇@第2版》读书笔记1:了解Web应用程序

    读书笔记第一部分对应原书的第一章,主要介绍了Web应用程序的发展,功能,安全状况. Web应用程序的发展历程 早期的万维网仅由Web站点构成,只是包含静态文档的信息库,随后人们发明了Web浏览器用来检 ...

  7. 《Effective Java》读书笔记 - 10.并发

    Chapter 10 Concurrency Item 66: Synchronize access to shared mutable data synchronized这个关键字不仅保证了同步,还 ...

  8. Java快车读书笔记

    办公自动化:OA 客户关系管理:CRM人力资源:HR 企业资源计划:ERP知识管理:KM 供应链管理:SCM企业设备管理系统:EAM 产品生命周期管理:PLM面向服务体系架构:SOA 商业智能:BI项 ...

  9. 深入Java虚拟机读书笔记第一章Java体系结构介绍

    第1章 Java体系结构介绍 Java技术核心:Java虚拟机 Java:安全(先天防bug的设计.内存).健壮.平台无关.网络无关(底层结构上,对象序列化和RMI为分布式系统中各个部分共享对象提供了 ...

随机推荐

  1. 【Zookeeper】源码分析之序列化

    一.前言 在完成了前面的理论学习后,现在可以从源码角度来解析Zookeeper的细节,首先笔者想从序列化入手,因为在网络通信.数据存储中都用到了序列化,下面开始分析. 二.序列化 序列化主要在zook ...

  2. java 数组声明方法

    //数组 public class Test16{ public static void main(String args[]){ //声明一: int [] x; x = new int[3];// ...

  3. Servlet学习(二):ServletConfig获取参数;ServletContext应用:请求转发,参数获取,资源读取;类装载器读取文件

    转载:http://www.cnblogs.com/xdp-gacl/p/3763559.html 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件 ...

  4. 转:典型开源3D引擎分类比较

    常见的3D引擎有:Unreal.Quake.Lithtech.OGRE.Nebula.Irrlicht.Truevision3D... 其中开源免费的有:OGRE.irrlicht.fly3d.Neo ...

  5. ContentResolver.query()—>buildQueryString()

    Cursor cursor = context.getContentResolver().query(Sms.CONTENT_URI,         new String[]{"threa ...

  6. Android中创建倒影效果的工具类

                     一.有时候我们需要创建倒影的效果,我们接触最多的都是图片能够创建倒影,而布局依然可以创建倒影.       二.工具类代码 import android.graphi ...

  7. Node.js的一些基本概念

    1. Node.js简介 1.1 Node.js是什么 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js是一个能够在服务器端运行JavaScript的开放源代码.跨 ...

  8. (原)python中不同文件之间使用所谓的全局变量

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/8108640.html 参考网址: https://www.cnblogs.com/20150705-y ...

  9. 【RS】Local Low-Rank Matrix Approximation - LLORMA :局部低秩矩阵近似

    [论文标题]Local Low-Rank Matrix Approximation (icml_2013 ) [论文作者]Joonseok Lee,Seungyeon Kim,Guy Lebanon  ...

  10. realloc 使用详解(分析realloc invalid pointer、指针无效等错误)【转】

    来源:http://www.cnblogs.com/ladd/archive/2012/06/30/2571420.htmlrealloc函数用来为ptr重新分配大小为size的一块内存,看似很简单, ...