《Java Concurrency》读书笔记,使用JDK并发包构建程序
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. 同步器
5. 显式锁
6. Fork-Join框架
《Java Concurrency》读书笔记,使用JDK并发包构建程序的更多相关文章
- Java 并发编程实践基础 读书笔记: 第三章 使用 JDK 并发包构建程序
一,JDK并发包实际上就是指java.util.concurrent包里面的那些类和接口等 主要分为以下几类: 1,原子量:2,并发集合:3,同步器:4,可重入锁:5,线程池 二,原子量 原子变量主要 ...
- java effective 读书笔记
java effective 读书笔记 []创建和销毁对象 静态工厂方法 就是“封装了底层 暴露出一个访问接口 ” 门面模式 多参数时 用构建器,就是用个内部类 再让内部类提供构造好的对象 枚举 si ...
- 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域
深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理 ...
- Java并发读书笔记:线程安全与互斥同步
目录 导致线程不安全的原因 什么是线程安全 不可变 绝对线程安全 相对线程安全 线程兼容 线程对立 互斥同步实现线程安全 synchronized内置锁 锁即对象 是否要释放锁 实现原理 啥是重进入? ...
- 单元测试之道Java版——读书笔记
单元测试知道Java版读书笔记 首先我们必须要知道我们所写的代码,它的功能是什么,如果我们不了解代码的行为,那么也就无从测试. 我们测试的目的,是为了我们整个程序架构的稳定,代码其实就是欧文要实现功能 ...
- 《黑客攻防技术宝典Web实战篇@第2版》读书笔记1:了解Web应用程序
读书笔记第一部分对应原书的第一章,主要介绍了Web应用程序的发展,功能,安全状况. Web应用程序的发展历程 早期的万维网仅由Web站点构成,只是包含静态文档的信息库,随后人们发明了Web浏览器用来检 ...
- 《Effective Java》读书笔记 - 10.并发
Chapter 10 Concurrency Item 66: Synchronize access to shared mutable data synchronized这个关键字不仅保证了同步,还 ...
- Java快车读书笔记
办公自动化:OA 客户关系管理:CRM人力资源:HR 企业资源计划:ERP知识管理:KM 供应链管理:SCM企业设备管理系统:EAM 产品生命周期管理:PLM面向服务体系架构:SOA 商业智能:BI项 ...
- 深入Java虚拟机读书笔记第一章Java体系结构介绍
第1章 Java体系结构介绍 Java技术核心:Java虚拟机 Java:安全(先天防bug的设计.内存).健壮.平台无关.网络无关(底层结构上,对象序列化和RMI为分布式系统中各个部分共享对象提供了 ...
随机推荐
- JavaScript中如何检测一个变量是一个String类型?请写出函数实现
方法1. function isString(obj){ return typeof(obj) === "string"? true: false; // returntypeof ...
- 【Zookeeper】源码分析之Watcher机制(二)之WatchManager
一.前言 前面已经分析了Watcher机制中的第一部分,即在org.apache.zookeeper下的相关类,接着来分析org.apache.zookeeper.server下的WatchManag ...
- eclipse与SVN 结合(删除SVN中已经上传的问题)
问题是: 我有一个文件已经上传到了SVN ,但是我想把这个在SVN上的目录删除掉? 解决方法如下: 1,第一步,先在本地删除所有的你需要删除的文件: 2,第二步,选择当前的项目右键“Team”—“Up ...
- V-rep学习笔记:力传感器
VREP中可以添加力传感器,用于刚性连接在两个物体之间以测量这两个物体之间的作用力或力矩.如下图所示,力传感器可以测量沿着X.Y.Z三个坐标轴的力和力矩: [Forces and torques me ...
- django之异常错误3(Student matching query does not exist.)
错误提示: DoesNotExist at /blog/test2/ Student matching query does not exist. 说明:错误提示说明错误在test2中,查找数据库的表 ...
- python之模块 os
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块 os import os ''' FUNCTIONS abort(...)#暂不了解 a ...
- JS修改当前控件样式&为控件追加事件
先搁这吧,今天太晚了,以后再加注释和修整吧.不幸搜到的朋友就别看了 <%@ Page Language="vb" AutoEventWireup="false&qu ...
- mysql基础拓扑图
存在的意义,就是体验差异! 01.mysql架构图 02.账户认证流程 03.mysql逻辑结构
- 聊聊单元测试(三)——Spring Test+JUnit完美组合
本着“不写单元测试的程序员不是好程序员”原则,我在坚持写着单元测试,不敢说所有的Java web应用都基于Spring,但至少一半以上都是基于Spring的. 发现通过Spring进行bean管理后, ...
- js 动态控制 input 框 的只读属性
需求: 当下拉框的值为06即Voucher时, 文本框才可输入, 其他情况均为置灰不可录入状态. 问题: 设置input框的只读属性写成了readonly="true" 尼玛,坑死 ...