-
java 手写并发框架(二)异步转同步框架封装锁策略
序言
上一节我们学习了异步查询转同步的 7 种实现方式,今天我们就来学习一下,如何对其进行封装,使其成为一个更加便于使用的工具。
思维导图如下:
拓展阅读
java 手写并发框架(1)异步查询转同步的 7 种实现方式
异步转同步的便利性
实现方式
循环等待
wait & notify
使用条件锁
...
2019-01-18 03:21:15 |
Concurrency
-
java 手写并发框架(一)异步查询转同步的 7 种实现方式
序言
本节将学习一下如何实现异步查询转同步的方式,共计介绍了 7 种常见的实现方式。
思维导图如下:
异步转同步
业务需求
有些接口查询反馈结果是异步返回的,无法立刻获取查询结果。
比如业务开发中我们调用其他系统,但是结果的返回确实通知的。
或者 rpc 实现中,client 调用 server 端,结果也是异步返回的,那么如何同步获取调用结果呢?
正常处理逻辑
...
2019-01-18 03:21:15 |
Concurrency
-
java 异步查询转同步多种实现方式:循环等待,CountDownLatch,Spring EventListener,超时处理和空循环性能优化
异步转同步
业务需求
有些接口查询反馈结果是异步返回的,无法立刻获取查询结果。
正常处理逻辑
触发异步操作,然后传递一个唯一标识。
等到异步结果返回,根据传入的唯一标识,匹配此次结果。
如何转换为同步
正常的应用场景很多,但是有时候不想做数据存储,只是想简单获取调用结果。
即想达到同步操作的结果,怎么办呢?
思路
发起异步操作
...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-40-Lock Free 无锁算法
Lock-Free 编程是什么?
当谈及 Lock-Free 编程时,我们常将其概念与 Mutex 或 Lock 联系在一起,描述要在编程中尽量少使用这些锁结构,降低线程间互相阻塞的机会,以提高应用程序的性能。
类同的概念还有 “Lockless” 和 “Non-Blocking” 等。
实际上,这样的描述只涵盖了 Lock-Free 编程的一部分内容。本质上说,Lock-Free 编...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-39-Fork/Join 框架、工作窃取算法
工作窃取算法
工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来执行。
那么为什么需要使用工作窃取算法呢?
假如我们需要做一个比较大的任务,我们可以把这个任务分割为若干互不依赖的子任务,为了减少线程间的竞争,于是把这些子任务分别放到不同的队列里,并为每个队列创建一个单独的线程来执行队列里的任务,线程和队列一一对应,比如A线程负责处理A队列里的任务。
但是有的...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-38-构建自定义的同步工具 Condition、AQS
导读
类库中包含了许多存在状态依赖的类,例如FutureTask、Semaphore和BlockingQueue,他们的一些操作都有前提条件,例如非空,或者任务已完成等。
创建状态依赖类的最简单的房就是在JDK提供了的状态依赖类基础上构造。
例如第八章的ValueLactch,如果这些不满足,可以使用Java语言或者类库提供的底层机制来构造,包括
内置的条件队列
...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-37-StampedLock 读写锁中的最强王者
StampedLock
简介
我们前面介绍了 ReentrantReadWriteLock可重入读写锁详解,不过 jdk1.8 引入了性能更好的 StampedLock 读写锁,我愿称之为最强!
一种基于能力的锁,具有三种模式用于控制读/写访问。
StampedLock的状态由版本和模式组成。
锁定采集方法返回一个表示和控制相对于锁定状态的访问的印记; 这些方法的“尝试”版本可...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-36-ReentrantReadWriteLock 读写锁详解
ReentrantLock 锁回顾
在Java5.0之前,只有synchronized(内置锁)和volatile. Java5.0后引入了显示锁ReentrantLock.
ReentrantLock是可重入的锁,它不同于内置锁, 它在每次使用都需要显示的加锁和解锁, 而且提供了更高级的特性:公平锁, 定时锁, 有条件锁, 可轮询锁, 可中断锁. 可以有效避免死锁的活跃性问题
Loc...
2019-01-18 03:21:15 |
Concurrency