![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java并发编程实战笔记
Java并发编程实战笔记
孤丨焰
萌新一枚
展开
-
【读书笔记】《Java并发编程实战》第十五章 原子变量与非阻塞同步机制
原子变量与非阻塞同步机制知识梳理原创 2020-08-24 20:34:05 · 204 阅读 · 0 评论 -
【读书笔记】《Java并发编程实战》第十四章 构建自定义的同步工具——AQS介绍
AbstractQueuedSynchronizer知识梳理1.AbstractQueuedSynchronizer 1.AbstractQueuedSynchronizer 在基于AQS构建的同步器类中,最基本的操作包括各种形式的获取操作和释放操作。获取操作是一种依赖状态的操作,并且通常会阻塞。释放操作并不是一个可阻塞的操作,当执行释放操作时,所有在请求时被阻塞的线程都会开始执行。 AQS负责管理同步器类中的状态,它管理了一个整数状态信息,可以通过getState、setState以及compareAnd原创 2020-08-24 13:10:31 · 156 阅读 · 0 评论 -
【读书笔记】《Java并发编程实战》第十三章 显式锁
显示锁知识梳理原创 2020-08-17 13:38:08 · 221 阅读 · 0 评论 -
【读书笔记】《Java并发编程实战》第十一章 性能与可伸缩性
性能与可伸缩性知识梳理1.对性能的思考 1.对性能的思考原创 2020-08-13 16:10:28 · 251 阅读 · 0 评论 -
【读书笔记】《Java并发编程实战》第十章 活跃性危险
活跃性危险知识梳理1.死锁1.1锁顺序死锁1.2动态的锁顺序死锁 1.死锁 我们使用加锁机制来确保线程安全,但如果过度地使用加锁,则可能导致锁顺序死锁。同样,我们使用线程池和信号量来限制对资源的使用,但这些被限制的行为可能会导致资源死锁。 当一个线程永远地持有一个锁,并且其他线程都尝试获得这个锁时,那么它们将永远被阻塞。在线程A持有锁L并想获得锁M的同时,线程B持有锁M并尝试获得锁L,那么这种情况就是简单的死锁形式。(其中多个线程由于存在环路的锁依赖关系而永远地等待下去。) 死锁形式如下图所示: 1.1锁原创 2020-08-10 13:47:54 · 196 阅读 · 0 评论 -
【读书笔记】《Java并发编程实战》第八章 线程池的使用
线程池知识梳理1.线程饥饿死锁2.设置线程池的大小 1.线程饥饿死锁 在线程池中,如果任务依赖于其他任务,那么可能导致死锁。在单线程的Executor中,第二个任务停留在工作队列中,等待第一个任务的完成,之后到第二个任务开始执行,而第一个任务又需要第二个任务完成的结果,因此这样就导致死锁。只要线程池中的任务需要无限期地等待一些必须由池中其它任务才能提供的资源或条件,例如某个任务等待另一个任务的返回值或执行结果,除非线程池足够大,否则将发生线程饥饿死锁。例如: //在单线程Executor中任务发生死锁(不要原创 2020-08-05 21:12:05 · 237 阅读 · 0 评论 -
【读书笔记】《Java并发编程实战》第七章 取消与关闭
任务取消与JVM关闭知识梳理任务取消1.什么是任务取消?2.取消任务的方式有几种?2.1设置取消标志2.2中断 任务取消 1.什么是任务取消? 如果外部代码能在某个操作正常完成之前将其置入“完成状态”,那么这个操作就可以成为可取消的。 取消某个操作的原因可能有: 用户请求取消 有时间限制的操作 触发应用程序事件 发生错误 程序或任务关闭 2.取消任务的方式有几种? 取消任务的方式大体上有一下两种: 设置取消标志 中断 2.1设置取消标志 可以在程序中设置某个用于判断任务是否已取消的标志位,然后定期查原创 2020-08-01 13:32:23 · 273 阅读 · 0 评论 -
【读书笔记】《Java并发编程实战》第六章 Executor框架
Executor框架知识梳理Executor框架一、什么是Executor框架?二、Executor框架结构详解 Executor框架 一、什么是Executor框架? 为了把工作单元与执行机制分离开,Executor框架诞生了,他是一个用于统一创建与运行的接口。Executor框架实现的就是线程池的功能。 首先,我们先介绍Executor接口,如下示例: //Executor接口 public interface Executor { void execute(Runnable command); }原创 2020-07-27 00:29:04 · 245 阅读 · 0 评论 -
【读书笔记】《Java并发编程实战》第五章 同步容器类与并发容器类
基础构建模块知识梳理同步容器类 同步容器类原创 2020-07-22 15:07:49 · 243 阅读 · 0 评论 -
【读书笔记】《Java并发编程实战》第四章 对象的组合
对象的组合知识梳理设计线程安全的类1.找出构成对象状态的所有变量2.找出约束状态变量的不变性条件3. 建立对象状态的并发访问管理策略实例封闭线程安全性委托拓展线程安全的类 设计线程安全的类 要确保类的线程安全性,就需要确保它的不变性条件不会再并发访问的情况下被破坏。 在设计线程安全类的过程中,需要满足以下三个基本要素: 找出构成对象状态的所有变量 找出约束状态变量的不变性条件 建立对象状态的并发访问管理策略 概念介绍: 同步策略:定义了如何在不违背对象不变条件或后验条件的情况下对其状态的访问操作进行原创 2020-07-17 15:23:05 · 383 阅读 · 1 评论 -
【读书笔记】《Java并发编程实战》第三章 对象的共享
对象的共享知识梳理可见性失效数据非原子的64位操作Volatile变量发布与逸出线程封闭ThreadLocal类不变性安全发布 可见性 在多线程编程中,通常,我们无法确保读操作的线程能实时的看到其他线程写入的值。 为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。 并发编程过程中可能会发生“重排序”等问题,如例1。 //例1 public class NoVisibility { private static boolean ready; private static int numb原创 2020-07-09 19:38:46 · 308 阅读 · 0 评论 -
【读书笔记】《Java并发编程实战》第二章 线程安全性
线程安全性知识梳理线程安全性竞态条件数据竞争与竞态条件勿混淆复合操作加锁机制内置锁重入用锁来保护状态活跃性与性能 线程安全性 要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的和可变的状态的访问管理。 竞态条件 当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存在竞态条件。 最常见的竞态条件就是“先检查后执行”操作,另一种竞态条件是“读取-修改-写入”。 数据竞争与竞态条件勿混淆 数据竞争是指,如果在访问共享的非final类型的域时没有采用同步来进行协同,那么就会出现数据竞争。原创 2020-07-08 17:01:36 · 340 阅读 · 0 评论