-
JCIP-08-生产者消费者模式
生产者消费者模式
在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程、进程等)。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者。
这个属于基础模式,代码可以参考 轻松学习多线程-06-Producer Consumer 模式
缓冲区改良
单单抽象出生产者和消费者,还够不上是生产...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-07-CopyOnWriteArrayList 详解
问题
是什么?
有什么优缺点?
为什么性能高?原理是什么?
源码阅读
设计的启发
参考资料
《java 并发编程的艺术》
https://my.oschina.net/jielucky/blog/167198
https://blog.csdn.net/maoyuanming08...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-07-CopyOnWriteArraySet 入门使用及源码详解
问题
是什么?
有什么优缺点?
为什么性能高?原理是什么?
源码阅读
设计的启发
CopyOnWriteArraySet
官方定义
CopyOnWriteArraySet 是一个使用内部CopyOnWriteArrayList进行所有操作的Set。
特性
因此,它具有相同的基本...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-07-java 从零实现 CopyOnWriteHashMap
COW 的思想
思想的通用性
CopyOnWriteArrayList 和 CopyOnWriteArraySet 这种读写分离的思想是通用的。
今天就让我们用这种思想实现一个简单的工具:CopyOnWriteHashMap。
实践出真知
这个工具包都出来几十年了,还是用的人很少。
要学以致用,站在巨人的肩膀上,
自己实现一个 copyOnWriteMap
类定义
publ...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-06-同步容器类
问题
为什么需要同步容器类?
同步容器类的优点和缺点?
对我们设计的启发
同步容器类
java 中的同步容器
在Java中,同步容器主要包括2类:
1)Vector、Stack、HashTable
2)Collections类中提供的静态工厂方法创建的类
Vector实现了List接口,Vector实际上就是一个数...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-05-对象组合
问题
如何保证一个类是线程安全的?怎么验证?
线程安全的类可以成为组件,更加方便的创建线程安全的类吗?
线程安全的类有哪些条件
在设计线程安全类的过程中,需要包含以下三个基本要素:
1、找出构成对象状态的所有变量
2、找出约束状态变量的不变性条件
3、建立对象状态的并发访问管理策略
ps: 一言以蔽之,让所有变量都被对象并发管理。
...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-04-可见性,发布与溢出,线程安全对象的构建
1 可见性
说到底并发还是离不开 JMM 的原理。可以看下我以前整理的 JMM 主内存和工作内存 以及后面的可见性,原子性,有序性。
1.1 内存模型
主内存:所有线程都可以访问
本地内存:每个线程私有的内存
java 的所有变量都存储在主内存中
每个线程有自己独的工作内存,保存了该线程使用到的变量副本,是对主内存中变量的一份拷贝
...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-03-线程安全
1. 线程安全性
1.1 概念
当多个线程访问某个类时,不管运行时环境采用何种调度方式 或者这些线程如何交替执行,并且在主调代码中不需要任何额外的同步或者协同,这个类都能表现正确的行为,那么称这个类时线程安全的。
1.2 解决方案
多个线程访问可变的变量,导致其值不正确。
修复的方式可以从下面的几个方面入手:
不在线程之间共享该变量 ThreadLocal +...
2019-01-18 03:21:15 |
Concurrency