引:原子变量与非阻塞同步机制相比于基于锁的方案可以拥有更高的性能和可伸缩性。
Java并发_11_构建自定义同步工具
引:创建状态依赖的类的最简单的方法通常是在类库中现有状态依赖类的基础上进行构造。但如果类库没有提供你需要的功能,我们还可以使用Java语言和类库提供的底层机制来构造自己的同步机制,包括内置的条件队列、显式的Condition对象以及AbstractQueuedSynchronizer框架。
Java并发_10_显示锁
引:Java5.0以后提供了一种新的协调对共享对象的访问机制——ReentrantLock。它并不是用来替代内置锁的方法,而是当内置加锁不适用时,作为一种可选择的高级功能。
Java并发_9_性能和可伸缩性
引:线程最主要的目的是提高程序的运行性能,虽然我们希望获得更好的性能,但始终要把安全性放在第一位。首先要保证程序的正常运行,然后仅当程序的性能需求和测试结果要求程序执行得更快时,才应该设法提高它的运行速度
Java并发_8_避免活跃性危险
引:在安全性和活跃性之间通常存在着某些制衡。我们使用加锁机制来确保线程安全,但如果过度地使用加锁,则可能导致顺序死锁。同样,我们使用线程池和信号量来限制对资源的使用,但这些被限制的行为可能会导致资源死锁。Java应用程序无法从死锁中恢复过来,因此在设计时一定要排除那些可能导致死锁出现的条件。
Java并发_7_线程池的使用
引:之前介绍了Executor任务执行框架的使用,它不仅简化了任务与线程的生命周期管理,而且还提供了一种简单灵活的方式将任务的提交和任务的执行策略解耦开来。但是深入下去,我们需要对线程池进行配置和调优,并且分析再使用任务执行框架时需要注意的各种危险。
Java并发_6_取消与关闭
引:任务和线程的启动很容易,在大多数时候,我们都会让他们运行直到结束,然而,有时候我们希望提前结束任务或线程,但是Java没有提供任何机制来安全地终止线程,只是提供了中断,这是一种协作机制,能够使一个线程终止另一个线程的工作。所以需要我们能很完善地处理失败、关闭和取消等过程。
Java并发_5_任务执行
引:在大多数并发应用程序都是围绕“任务执行”来构造的:任务通常是一些抽象且离散的工作单元。通过把应用程序的工作分解到多个任务中,可以简化程序的组织结构,提供一种自然的事务边界来优化错误恢复过程,以及提供一种自然的并行工作结构来提升并发性。
Java并发_4_基础构建模块
引:JDK提供的东西效率应该是可以保证的,所以我们要学会去使用JDK自带的并发基础构建模块,以及理解在使用这些模块来构建应用程序时的一些常用模式。
Java并发_3_对象的组合
引:我们不希望每一次访问内存都进行分析以确保程序是线程安全的,而是希望将一些现有的线程安全组件组合为更大规模的组件或程序。