![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java 并发编程实战 笔记
小达人Fighting
这个作者很懒,什么都没留下…
展开
-
第1 章 简介
》》并发简史 @@ 操作系统的出现使得计算机每次能运行多个程序,并且不同的程序都在单独的进程中运行: 操作系统为各个独立执行的进程分配各种资源,包括内存、文件句柄以及安全证书等。 如果需要的话,在不同的进程之间可以通过一些粗粒度的通信机制来交换数据,包括: 套接...原创 2018-09-13 21:59:25 · 446 阅读 · 0 评论 -
第 15 章 原子变量与非阻塞同步机制
@@@ 在 java.util.concurrent 包的许多类中,例如 Semaphore 和 ConcurrentLinkedQueue ,都提供 了比 synchronized 机制更高的性能和可伸缩性。这种性能提升的主要来源:原子变量与非阻塞的同步机制。 @@@ 非阻塞算法: ...原创 2018-10-19 21:26:55 · 185 阅读 · 0 评论 -
第13 章 显式锁
@@@ 在 Java 5.0 之前,在协调对共享对象的访问时可以使用的机制只有 synchronized 和 volatile 。 @@@ Java 5.0 增加了一种新的机制:ReentrantLock , ReentrantLock 并不是一种替代内置 加锁的方法,而是当内置加...原创 2018-10-09 19:09:52 · 192 阅读 · 0 评论 -
第 9 章 图形用户界面应用程序
@@@ 为了维持安全性,一些特定的任务必须运行在 Swing 的事件线程中。然而,在事件 线程中不应该执行时间较长的操作,以免用于界面失去响应。而且,由于 Swing 的数据结构 不是线程安全的,因此必须将它们限制在事件线程中。 @@@ 几乎所有的 GUI 工具包(包括 ...原创 2018-09-29 15:14:49 · 415 阅读 · 0 评论 -
第 12 章 并发程序的测试
@@@ 在编写并发程序时,可以采用与编写串行程序时相同的设计原则与设计模式。二者的差异 在于,并发程序存在一定程度的不确定性,而在串行程序中不存在这个问题。这种不确定性将增加 不同交互模式以及故障模式的数量,因此在设计并发程序时必须对这些模式进行分析。 @@@ 在测试串行程序正确性与性能等方面...原创 2018-10-07 23:05:06 · 751 阅读 · 0 评论 -
第 8 章 线程池的使用
》》在任务和执行策略之间的隐性耦合 @@@ Executor 框架可以将任务的提交与任务的执行策略解耦开来。 @@@ 虽然 Executor 框架的制定和修改执行策略都提供了相当大的灵活性,但并非所有的任务 都能适用所有的执行策略。有些类型的任务需要明确地指定执行策略,包括:...原创 2018-09-28 18:57:46 · 137 阅读 · 0 评论 -
第 14 章 构建自定义的同步工具
@@@ 类库包含了许多存在状态依赖性的类,例如 FutureTask 、Semaphore 和 BlockingQueue 等。在这些类的一些操作中有着基于状态的前提条件。 @@@ 创建状态依赖类的最简单方法通常是在类库中现有状态类的基础上进行构造。但如果类库中 ...原创 2018-10-12 20:18:40 · 175 阅读 · 0 评论 -
第 4 章 对象的组合
》》设计线程安全的类 @@ 通过使用封装技术,可以使得在不对整个程序进行分析的情况下就可以判断一个类 是否是线程安全的。 @@ 在设计线程安全类的过程中,需要包含以下三个基本要素: ---------- 找出构成对象状态的所有变量。 -------...原创 2018-09-22 16:43:52 · 177 阅读 · 0 评论 -
第 7 章 取消与关闭
@@@ 要使任务和线程能安全、快速、可靠地停止下来,并不是一件容易的事。Java 没有提供 任何机制来安全地终止线程。但它提供了中断(interruption),这是一种协作机制,能够使一个 线程终止另一个线程的当前工作。 @@@ 在编写任务和服务时可以使用一种协作的方式:当需要停...原创 2018-09-27 14:26:49 · 180 阅读 · 0 评论 -
第 11 章 性能与可伸缩性
@@@ 线程的最主要目的是提高程序的运行性能。 @@@ 线程可以使程序更加充分地发挥系统的可用处理能力,从而提高系统的资源利用率。 @@@ 线程可以使程序在运行现有任务的情况下立即开始处理新的任务,从而提高系统的 响应性。 @@@ ...原创 2018-10-04 19:29:45 · 209 阅读 · 0 评论 -
第 3 章 对象的共享
@@ 关键字 synchronized 可以用于实现原子性或确定 “ 临界区(Critical Section ) ” , 同时同步还有另一个重要的方面:内存可见性(Memory Visibility)。 @@ 可以通过显式地同步或者类库中内置的同步来保证对象被安全地发布。》》可见性 ...原创 2018-09-21 11:59:25 · 155 阅读 · 0 评论 -
第 10 章 避免活跃性危险
@@@ 在安全性和活跃性之间通常存在着某种权衡。我们使用加锁机制来确保线程安全,但如果 过度地使用加锁,则可能导致锁顺序死锁。 @@@ 我们使用线程池和信号量来限制对资源的使用,但这些被限制的行为可能会导致资源死锁。 @@@ Java 程序无法中死锁中恢复过来,因此在设计...原创 2018-10-01 14:12:50 · 156 阅读 · 0 评论 -
第 6 章 任务执行
》》在线程中执行任务 @@@ 大多数并发应用程序都是围绕 “ 任务执行 (Task Execution)” 来构造的: 任务通常 是一些抽象的且离散的工作单元。通过把应用程序的工作分解到多个任务中,可以简化程序的组 织结构,提供一种自然的事务边界来优化错误恢复过程,以及提供一种自然的并行工作结构来提 ...原创 2018-09-25 17:41:23 · 273 阅读 · 0 评论 -
第2章 线程安全性
@@ 要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的(Shared) 和可变的(Mutable)状态的访问。 @@ 从非正式的意义上来说,对象的状态是指存储在状态变量(例如实例或静态域)中的数据。 对象的状态可能包括其他依赖对象的域。 @@ “ 共...原创 2018-09-19 21:57:36 · 210 阅读 · 0 评论 -
并发技巧
》》可变状态是至关重要的。 所有的并发问题都可以归结为如何协调并发状态的访问。可变状态越少,就越容易 确保线程安全性。》》尽量将域声明为 final 类型, 除非需要它们是可变的。》》不可变对象一定是线程安全的。 不可变对象能极大降低并发编程的复杂性。它们更为简单而且安全,可以任意共享 而无须使用加锁...原创 2018-09-24 15:43:07 · 99 阅读 · 0 评论 -
第 5 章 基础构建模块
@@@ 委托是创建线程安全类的一个最有效的策略:只需让现有的线程安全类管理所有的 状态即可。 @@@ Java 平台类库包含了丰富的并发基础构建模块,例如线程安全的容器类以及各种用于 协调多个相互协作的线程控制流的同步工具类。》》同步容器类 @@@ ...原创 2018-09-24 15:25:27 · 150 阅读 · 0 评论 -
第 16 章 Java 内存模型
@@@ 安全发布 、 同步策略的规范以及一致性等的安全性都来自于 JMM 。》》什么是内存模型,为什么需要它 @@@ 在编译器中生成的指令顺序,可以与源代码中的顺序不同; 此外编译器还会把变量保存在寄存器而不是内存中; 处理器可以采用乱序或并行等方式来执...原创 2018-10-22 15:01:47 · 163 阅读 · 0 评论