并发编程
-
Java多线程并发【1】并发基础和内存模型
计算机中,CPU、内存和 I/O 设备的运算速度是有差异的,为了更高效地利用 CPU 的性能,平衡三者的速度差异,计算机系统从各个层面进行了优化: CPU 有单独的缓存区,用来均衡…
-
Java 多线程并发【2】线程
并发与线程 并发并不一定依赖多线程,比如进程也可以并发。但 Java 中的并发多数都与线程有关。 线程是操作系统中的概念,是比进程更轻量级的调度执行基本单位。主流的操作系统都提供了…
-
Java 多线程并发【3】线程安全
线程安全比较严谨的定义是: 当多个线程访问一个对象时,如果不考虑这些线程的运行环境下的调度和交替执行,也就不需要进行额外的同步,或者在调用方进行任何其他的协调操作。调用这个对象的行…
-
Java 多线程并发【4】虚拟机锁优化方案
在线程安全章节说明了线程安全的定义,以及线程安全实现的方案。 线程安全分为不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。 线程安全的实现又划分为互斥同步、非阻塞同步和无锁…
-
Java 多线程并发【5】synchronized
基础 Java 在虚拟机层面提供了 synchronized 关键字供开发者快速实现互斥同步的重量级锁来保障线程安全。 synchronized 关键字可用于两种场景: 修饰方法。…
-
Java 多线程并发【6】volatile
在并发基础中我们分析了并发问题的根源是三个问题:原子性、可见性和有序性问题。简单回顾一下这三个特性: 原子性:一个具有原子性的操作应该是不可以被打断的,要么全部不执行,要么全部执行…
-
Java 多线程并发【7】CAS 和原子类
CAS CAS ,全称 compare and swap ,比较和交换,用于解决多线程并发情况下,使用锁造成性能损耗的一种机制。CAS操作包含三个操作数——内存位置(V)、预期原值…
-
Java 多线程并发【8】LockSupport
概览 “ 这部分内容来自于这个类的注释,简单翻译了下。 LockSupport 类是用于创建锁和其他同步类的基本线程阻塞原语。 它的实现思想是给每个使用它的线程颁发一个许可,当许可…
-
Java 多线程并发【9】AbstractQueuedSynchronizer
AbstractQueuedSynchronizer AbstractQueuedSynchronizer 简称 AQS ,抽象队列同步器,用来实现依赖于先进先出(FIFO)等待队…
-
Java 多线程并发 【10】ReentrantLock
背景 在 Java 中实现线程安全的传统方式是 synchronized 关键字,虽然它提供了一定的同步能力,但它在使用上是严格的互斥同步实现:一个线程只能获取一次锁,没有给其他线…
-
Java 多线程并发 【11】ReentrantReadWriteLock
ReentrantReadWriteLock ,可重入读写锁。实际使用场景中,我们需要处理的操作本质上是读与写。而对这两种操作进行同步操作的难度也是不一样的。 一般情况下,读操作不…
-
Java 多线程并发【12】BlockingQueue 体系
本文源码分析基于 https://github.com/openjdk/jdk BlockingQueue BlockingQueue ,阻塞队列,通常用于生产者消费者模式。 阻塞…
-
Java 多线程并发【13】FutureTask
“ 本文基于最新的 OpenJDK 代码,预计发行版本为 19 。 Java 的多线程机制本质上能够完成两件事情,异步计算和并发。并发问题通过解决线程安全的一系列 API 来解决;…
-
Java 多线程并发【14】CopyOnWriteArrayList
CopyOnWriteArrayList 是 Java 集合框架的一员,同时它也是 Java 并发框架中的一个数据结构。可以把它理解为线程安全版本的 java.util.Array…
-
Java 多线程并发【15】Executor 框架
Java 多线程并发【15】Executor 框架 在 Java 中,线程执行的任务被抽象为了 Runnable 接口,Runnable 通过唯一的 run 方法表示着任务运行的能…
-
Java 多线程并发【16】ThreadPoolExcutor
前置知识点 在了解 ThreadPoolExcutor 之前,我们需要回顾一下相关的知识点,他们是线程池底层原理的基础,包括: Executor 和 Runnable Blocki…