随笔分类 -  JUC

摘要:关于 CompletableFuture, 引用 baeldung 中的一句话: The best part of the CompletableFuture API is the ability to combine CompletableFuture instances in a chain o 阅读全文
posted @ 2022-12-03 23:28 Tailife 阅读(259) 评论(0) 推荐(0) 编辑
摘要:构造方法 创建线程池的方法如下: ExecutorService executor = Executors.newFixedThreadPool(8); 但是 《阿里 Java 开发手册》中禁止使用Executors工具类的方式创建线程池,而是推荐使用ThreadPoolExecutor的构造方法直 阅读全文
posted @ 2022-06-08 18:40 Tailife 阅读(31) 评论(0) 推荐(0) 编辑
摘要:作用 线程池主要有以下好处 降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度:当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监 阅读全文
posted @ 2022-06-08 18:39 Tailife 阅读(39) 评论(0) 推荐(0) 编辑
摘要:Queue 阻塞队列(BlockingQueue)继承自 Queue,先看看 Queue 定义了哪些接口 /** * Queue 相对于 Collection 中基本的方法,提供了另外的插入,移除和检查方法。 * 每个方法都有两种形式:如果操作失败,一种是直接抛异常,另一种是返回特殊值(null 或 阅读全文
posted @ 2022-06-08 18:36 Tailife 阅读(30) 评论(0) 推荐(0) 编辑
摘要:Condition 接口 在线程基础一文中说道,Java 中任何一个对象都拥有一组监视器方法(定义在 java.lang.Object 上),主要包括 wait()、wait(long timeout)、notify() 以及 notifyAll() 方法。而且这些方法使用时有个前提,就是必须先获得 阅读全文
posted @ 2022-06-08 18:34 Tailife 阅读(95) 评论(0) 推荐(0) 编辑
摘要:介绍 源码中是这么说的 Basic thread blocking primitives for creating locks and other synchronization classes. LockSupport 是创建锁和其他同步组件中阻塞线程的基本原语 比如在 AQS 中的 FIFO 队 阅读全文
posted @ 2022-06-08 18:32 Tailife 阅读(84) 评论(0) 推荐(0) 编辑
摘要:可重入性 概念 在说 ReentrantLock 之前,先了解下什么是可重入。假如有如下代码 private synchronized static void testA() { testB(); } private synchronized static void testB() { // do 阅读全文
posted @ 2022-06-08 18:30 Tailife 阅读(39) 评论(0) 推荐(0) 编辑
摘要:在【Java 并发编程】——AQS 源码探索之独占式一文中从源码详细介绍了 AQS 独占式的实现方式。本文将介绍 AQS 的共享式,顾名思义,共享式就是允许多个线程同时访问同一个资源。 共享式实例 在独占式中,AQS 中的状态用来表示可获取或者已独占(比如 0 表示可获取,1 表示已被占用)。共享式 阅读全文
posted @ 2022-06-08 18:25 Tailife 阅读(44) 评论(0) 推荐(0) 编辑
摘要:上篇通过 AQS 简单地实现了一个独占锁,锁最主要的方法就是 lock() 和 unlock(),那我们就从 lock 走起 public void lock() { sync.acquire(1); } 获取(不响应中断) 自定义组件中独占式获取便是调用同步器的模板方法 acquire(int a 阅读全文
posted @ 2022-06-08 18:23 Tailife 阅读(55) 评论(0) 推荐(0) 编辑
摘要:介绍 队列同步器 AbstractQueuedSynchronizer,简称为 AQS,是用来构建锁及其他同步组件(比如 ReentrantLock、CountDownLatch)的基础框架。它使用了一个 int 成员变量表示同步状态,通过内置的 FIFO 队列来完成获取资源线程的排队工作。AQS 阅读全文
posted @ 2022-06-08 18:22 Tailife 阅读(78) 评论(0) 推荐(0) 编辑
摘要:volatile 的特性 关键字 volatile 可以说是 Java 虚拟机提供的最轻量级的同步机制。 当一个变量被定义为 volatile 之后,它将具备两种特性,可见性和禁止指令重排。 可见性 这里的“可见性”是指当一个线程修改了 volatile 变量,其他线程是可以立即得知的。而普通变量不 阅读全文
posted @ 2022-06-08 18:16 Tailife 阅读(63) 评论(0) 推荐(0) 编辑
摘要:final 域的重排序规则 对于 final 域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final 域的写入,与随后把这个构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。 初次读一个包含 final 域的对象的引用,与随后初次读这个 final 域,这两个操作之间不能重 阅读全文
posted @ 2022-06-08 18:15 Tailife 阅读(91) 评论(0) 推荐(0) 编辑
摘要:1. 并发模型的两个关键问题 在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。 Java 的并发采用的是共享内存模型,Java 线程之间的通 阅读全文
posted @ 2022-06-08 17:07 Tailife 阅读(173) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示