🍤 并发操作合集系列 目录
🍕 并发操作合集系列 源代码
这一篇文章也会介绍一个并发容器,BlockingQueue。
BlockingQueue阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞...
🍤 并发操作合集系列 目录
🍕 并发操作合集系列 源代码
Java中提供了大量的并发容器,它们不同于并行容器(Vector,HashMap)。并发容器在确保线程安全的同时又具备较高的性能。
本章会介绍并发容器中最常用的ConcurrentHashMap。
ConcurrentHashMap简介ConcurrentMap接口继承自Map接口,实现了高吞吐量的同时线程安全。ConcurrentHashMap是Concu...
🍤 并发操作合集系列 目录
🍕 并发操作合集系列 源代码
本章主要讲解原子变量和volatile关键字的使用方式和使用场景,包括Java8中新加入的LongAdder和LongAccumulator。想要了解原子变量和volatile关键字,就必须先了解Java内存模型中的原子性和可见性。
可见性和原子性原子性在Java中,对基本数据类型的变量的读取T...
🍤 并发操作合集系列 目录
🍕 并发操作合集系列 源代码
并发API支持多种显式的锁,它们由Lock接口规定,用于代替synchronized的隐式锁。锁对细粒度的控制支持多种方法,因此它们比隐式的监视器具有更大的开销。
Lock接口和synchronized关键字的差别两者的区别如下:
类别
synchronized
Lock
存在层次
Java的关键字,在jvm...
🍤 并发操作合集系列 目录
🍕 并发操作合集系列 源代码
这篇文章将告诉你如何正确的使用synchronized关键字。通过示例代码彻底了解synchronized关键字的使用规则和一些隐患。
1.Java的锁1.1 锁的内存语义
锁可以让临界区互斥执行,还可以让释放锁的线程向同一个锁的线程发送消息
锁的释放要遵循Happens-before原则...
🍤 并发操作合集系列 目录
🍕 并发操作合集系列 源代码
这篇文章中会详细介绍那些切换线程状态的常用方法(wait,notify,sleep,join,yield)。
线程的状态和常用方法还是这张图。本章中介绍的方法与线程状态的关系如下图所示
wait() 和 notify() 方法首先,这两个方法是做什么的:
Object.wait() – 挂起一个线程
Object.notify() – 唤醒一Ӣ...
🍤 并发操作合集系列 目录
🍕 并发操作合集系列 源代码
在介绍并发的操作之前,必需先理解线程的生命周期。
线程的生命周期下图是Java中线程的生命周期,以及切换状态的常用方法。java.lang.Thread类包含的状态枚举定义了这6个状态。
不管在任何时候,线程会是以下状态的其中一个:
New(新建ܫ...
什么是任务?任务就是工作单元,我们把应用中的工作分成多个任务,从而进行事务操作和并行工作。
在线程中执行任务首先任务之间必须是相互独立的:任务并不依赖于其他任务的状态,结果或边界效应。
串行地执行任务有多种调度任务的策略,而其中一些策略能够更好地利用潜...
本章中讲介绍在Java5和6中引入的一些构建并发模块,以及如何用这些模块来进行开发。
同步容器类同步容器类包括Vector和Hashtable、这些类实现线程安全的方式是:将它们的状态封装起来,并对每个公有方法都进行同步,使得每次只有一个线程能访问容器的状态。
同步容器类的问题常见的复合ٌ...
在本章中涉及的组合模式中,将会把一些现有的线程安全组件组合成更大的程序,从而实现线程安全。
设计线程安全的类我们可以通过封装来确保程序是线程安全的。线程安全的类的设计过程:
找出构成对象状态的所有属性
找出约束这些属性的不变性条件
建立这些属性的并发访问策...