java concurrency 读书笔记
文章地址: http://tutorials.jenkov.com/java-concurrency/index.html
Table of Contents
第一章 并发模型
第二章 并发的本质
第三章 CompareAndSwap常用类
第四章 Thread Signal
第一章 并发模型
1.1 Parallel Workers
1.2 Assembly Line
Reference: http://tutorials.jenkov.com/java-concurrency/concurrency-models.html
第二章 并发的本质
2.1.1 Race Condition (code block atomic)
要求被执行的代码块要么全部执行,要么都不执行。
Reference: http://tutorials.jenkov.com/java-concurrency/race-conditions-and-critical-sections.html
2.1.2 Variable Visibility (write to main memory, read from main memory)
对数据的写,不保存在cache里,而是直接刷新到内存;
对数据的读,不是从cache里读取,而是从内存里读取;
http://tutorials.jenkov.com/java-concurrency/java-memory-model.html
http://tutorials.jenkov.com/java-concurrency/volatile.html
2.2.1 blocking
race condition : synchronized
variable visibility: synchronized
synchronized method synchronized static method
synchronized instance synchronized Class instance
又叫悲观锁,适用于高并发场景。
http://tutorials.jenkov.com/java-concurrency/synchronized.html
2.2.2 unblocking
race condition: Unsafe.compareAndSwap
variable visibility: volatile (64位原子,写内存,读内存; write before, read after 指令禁止重排)
又叫乐观锁,适用于中低并发场景。
http://tutorials.jenkov.com/java-concurrency/compare-and-swap.html
http://tutorials.jenkov.com/java-concurrency/non-blocking-algorithms.html
第三章 CompareAndSwap常用类
3.1 Lock
ReentrantLock 可重入锁 (已经获得该类的锁,在critical area里需要访问同一个类的其他critical area)
ReentrantReadWriteLock 可重入读写锁
http://tutorials.jenkov.com/java-concurrency/locks.html
http://tutorials.jenkov.com/java-concurrency/read-write-locks.html
3.2 BlockingQueue
ArrayBlockingQueue
LinkedBlockingQueue
3.3 AtomicXxx
AtomicBoolean
AtomicInteger
AtomicLong
AtomicDouble
AtomicReference
第四章 Thread Signal
4.1 Object
wait 在一个monitor对象上block住,释放锁
notify 在monitor上block住的线程中随机选择一个唤醒;
notifyAll 唤醒monitor上所有block住的线程
4.2 Condition
await 在lock上block住
signal 在lock上随机释放一个线程
signalAll 唤醒lock上所有等待线程
总结: Object 的通知只能wait和notify在同一个队列里,Lock.newCondition可以分情况划分队列wait、notify.
http://tutorials.jenkov.com/java-concurrency/starvation-and-fairness.html
扩展阅读:LMAX Disruptor
https://itnext.io/understanding-the-lmax-disruptor-caaaa2721496
java concurrency 读书笔记相关推荐
- java虚拟机读书笔记 第三章 垃圾收集器和内存分配策略
java虚拟机读书笔记 第三章 垃圾收集器和内存分配策略 GC需要完成的三件事情:哪些内存需要回收.什么时候回收.如何回收 垃圾回收器在对堆进行回收前,首先要确定那些对象存活,哪些对象已经死去,判断的 ...
- Core Java 8 读书笔记-Networking编程
Core Java 8 读书笔记-Networking编程 作者:老九-技术大黍 原文:Core Java 8th Edition 社交:知乎 公众号:老九学堂(新人有惊喜) 特别声明:原创不易,未经 ...
- Java 内存分配——Thinking in Java 4th 读书笔记
做开发多年,一直忙于项目,从没好好的整理知识,从现在开始,尽量每周多抽时间整理知识,分享在博客,在接下来的博客中,我将为大家分享我读<Java编程思想4th>英文版读书笔记,一来便于知识的 ...
- 《Effective Java》读书笔记 - 11.序列化
Chapter 11 Serialization Item 74: Implement Serializable judiciously 让一个类的实例可以被序列化不仅仅是在类的声明中加上" ...
- java pitfalls读书笔记
以前做的笔记,供需要的朋友参考 刚从图书馆借了几本不错的java经典书籍,翻了翻,做了一些摘抄比较. ·实例方法被覆盖,静态方法被隐藏,即静态方法不能被覆盖 ·试图用子类的静态方法隐藏父类中同样标识的 ...
- 《Effective java》—–读书笔记
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并 ...
- 深入Java虚拟机读书笔记[10:20]
第十章 栈和局部变量操作 第十一章 类型转换 第十二章 整数运算 第十三章 逻辑运算 第十四章 浮点运算 第十五章 对象和数组 第十六章 控制流 第十七章 异常 以上一些是操作码相关的内容, 第十八章 ...
- 《Effective Java》读书笔记--创建和销毁对象
2019独角兽企业重金招聘Python工程师标准>>> 考虑用静态工厂方法代替构造函数. 当我们在写一个工具类时,是不希望用户将该类实例化的,所以应该定义一个private的构造函数 ...
- java io读书笔记(6) Writing Arrays of Bytes
显而易见,一次性写出一堆数据,要比一个byte一个byte的写,快多了,因此,outputstream,给出了2个增强型的write: public void write(byte[] data) t ...
最新文章
- 一种无需留坑为页面动态添加View方案
- conda env环境配置
- npm使用入门(package.json)
- 码云一个仓库只有一个项目吗_gitee码云完整使用教程(部署与克隆)
- 错误信息:Microsoft 分布式事务处理协调器(MS DTC)已取消此分布式事务
- bat php 监控网站,HTML_进程监控实现代码[vbs+bat],运行后会在%windir%\system32\目录 - phpStudy...
- SPOJ - QTREE Query on a tree(树链剖分+线段树)
- 一个微服务网关的设计
- linux安装Git依赖的包出错,技术|Linux有问必答:如何在Linux上安装Git
- Qt|设计模式工作笔记-对单例模式进一步的理解(静态加单例实现专门收发UDP对象)
- 一起学习C语言:C语言数据类型(一)
- 如何更快获取想要的设计资源?
- ES6新特性_使用babel对ES6模块化代码转换_使用browserify对代码进行打包_实现es6兼容其他浏览器--JavaScript_ECMAScript_ES6-ES11新特性工作笔记045
- java基础知识查漏 三
- 如何让你的硬盘更快,系统更稳定!
- HDU 6603 Azshara's deep sea(凸包+区间DP)
- pb生成pbtxt时出错
- 【AI视野·今日NLP 自然语言处理论文速览 第六期】Fri, 11 Jun 2021
- 下行控制信息 - 其他用途的DCI
- 项目管理必看书籍推荐