随笔分类 -  Java-并发

摘要:探讨范围 ThreadPoolExecutor.addWorker() 如何通过 CAS(Compare-And-Swap) 和 锁机制 协同避免线程重复创建? 源码 /** * Checks if a new worker can be added with respect to current 阅读全文
posted @ 2026-02-23 20:29 时空穿越者 阅读(2) 评论(0) 推荐(0)
摘要:存量笔记,常读常新 ~ 再次回顾一下 Java 中的 synchronized 关键词 内存语义 进入 synchronized 块的内存语义是把在 synchronized 块内使用到的变量从线程的工作内存中清除,这样在 synchronized 块内使用变量时不会从线程的工作内存中获取,而是直接 阅读全文
posted @ 2026-02-09 13:38 时空穿越者 阅读(6) 评论(0) 推荐(0)
摘要:管道流(Piped Streams)是Java中用于线程间通信的特殊I/O流,它们通过创建"生产-消费"通道实现数据传输。 核心组件 连接方式 方式1:通过构造函数连接(推荐) // 创建时直接连接 PipedOutputStream pos = new PipedOutputStream(); P 阅读全文
posted @ 2026-02-08 20:44 时空穿越者 阅读(6) 评论(0) 推荐(0)
摘要:背景 在《深入浅出Java多线程》一书中有下面这样一段描述: 那Java中有类级别的锁吗? 下面我们先来看一下这个示例: public class Counter { private static int count = 0; // 类级别锁:锁定 Counter.class 对象 public s 阅读全文
posted @ 2026-02-08 10:44 时空穿越者 阅读(3) 评论(0) 推荐(0)
摘要:Executors java.util.concurrent下的Executors工具类提供了如下几个方法,代码如下: /** * Creates a single-threaded executor that can schedule commands * to run after a given 阅读全文
posted @ 2021-08-18 22:56 时空穿越者 阅读(551) 评论(0) 推荐(0)
摘要:一、饱和策略(线程池任务拒绝策略) ThreadPoolExecutor构造函数的RejectedExecutionHandler handler参数表示当提交的任务数超过maxmumPoolSize与workQueue之和时,任务会交给RejectedExecutionHandler来处理,此处我 阅读全文
posted @ 2021-08-17 10:03 时空穿越者 阅读(1146) 评论(0) 推荐(0)
摘要:一、线程池 为什么要使⽤线程池 使⽤线程池主要有以下三个原因:1. 创建/销毁线程需要消耗系统资源,线程池可以复⽤已创建的线程;2. 控制并发的数量; 并发数量过多,可能会导致资源消耗过多,从⽽造成服务器崩溃。(主要原因)3. 可以对线程做统⼀管理。 线程池的属性 资源弹性: 核心线程优先创建,队列 阅读全文
posted @ 2021-08-16 21:04 时空穿越者 阅读(426) 评论(0) 推荐(0)
摘要:延时队列 DelayQueue是一个支持延时获取元素的使用优先级队列实现的无界的阻塞队列。 在创建元素时可以指定多久才能从队列中获取当前元素,只有在延迟期满时才能从队列中提取元素。 类图如下: DelayQueue的定义以及构造函数如下: public class DelayQueue<E exte 阅读全文
posted @ 2021-08-15 20:29 时空穿越者 阅读(395) 评论(0) 推荐(0)
摘要:优先级阻塞队列 PriorityBlockingQueue是一个支持优先级排序的无界阻塞队列。 Note: PriorityBlockingQueue并不会阻塞生产者,而只是在没有可消费的数据时阻塞消费者;因此使用的时候需要特别注意,生产者生产数据的速度绝对不能快于消费者消费数据的速度,否则时间一长 阅读全文
posted @ 2021-08-15 11:11 时空穿越者 阅读(506) 评论(0) 推荐(0)
摘要:初识LinkedBlockingQueue LinkedBlockingQueue是线程安全的有界阻塞队列,其底层使用单向链表实现。 其类图如下: 其构造函数如下: /** * Creates a {@code LinkedBlockingQueue} with a capacity of * {@ 阅读全文
posted @ 2021-08-14 20:07 时空穿越者 阅读(645) 评论(0) 推荐(0)
摘要:初始ConcurrentLinkedQueue ConcurrentLinkedQueue 是线程安全的无界非阻塞队列,其底层使用单向链表实现,对于入队和出队操作使用 CAS 来实现线程安全。 其类图如下: 从类图可以发现其与其它阻塞队列的一个明显区别是,ConcurrentLinkedQueue没 阅读全文
posted @ 2021-08-14 16:49 时空穿越者 阅读(577) 评论(0) 推荐(0)
摘要:StampedLock 通常情况下,使用同步锁的代码如下: synchronized(this){ // do operation } Java6提供的ReentrantReadWriteLock使用方式如下: rwlock.writeLock().lock(); try { // do opera 阅读全文
posted @ 2021-08-13 21:12 时空穿越者 阅读(133) 评论(0) 推荐(0)
摘要:ReadWriteLock Java中的ReadWriteLock是什么? 一般而言,读写锁是用来提升并发程序性能的锁分离技术的成果,Java中的ReadWriteLock是Java5中新增的一个接口,提供了readLock和writeLock两种锁机制。 一个ReadWriteLock维护一对关联 阅读全文
posted @ 2021-08-13 19:25 时空穿越者 阅读(474) 评论(0) 推荐(0)
摘要:AQS是 AbstractQueuedSynchronizer 的简称,即抽象队列同步器,从字⾯意思上理解: 抽象:抽象类,只实现⼀些主要逻辑,有些⽅法由⼦类实现; 队列:使⽤先进先出(FIFO)队列存储数据; 同步:实现了同步的功能。 AQS是⼀个⽤来构建锁和同步器的框架,使⽤AQS能简单且⾼效地 阅读全文
posted @ 2021-08-12 08:46 时空穿越者 阅读(87) 评论(0) 推荐(0)
摘要:CopyOnWriteArrayList java.util.concurrent.CopyOnWriteArrayList是一个线程安全的 ArrayList,其修改操作是在底层的一个复制的数组(快照)上进行的,即用了写时复制策略。 其定义如下: public class CopyOnWriteA 阅读全文
posted @ 2021-08-11 08:48 时空穿越者 阅读(258) 评论(0) 推荐(0)
摘要:CAS CAS即CompareandSwap,其具体的意思是比较并交换;⽐较是否和给定的数值⼀致,如果⼀致则修改,不⼀致则不修改。 它是JDK提供的非阻塞原子性操作,它通过硬件保证了“比较、更新”操作的原子性。 在 Intel 处理器中,⽐较并交换通过指令cmpxchg实现。 细节 在CAS中,有这 阅读全文
posted @ 2021-08-10 08:48 时空穿越者 阅读(249) 评论(0) 推荐(0)
摘要:java内存模型 Java作为平台无关性语言,JSL(java语言规范)定义了一个统一的内存管理模型JMM(Java Memory Model),JMM屏蔽了底层平台内存管理细节。 JMM的核心目标是确保多线程环境下的 原子性、可见性 和 有序性。 (1)原子性保证操作不可分割; (2)可见性确保一 阅读全文
posted @ 2021-08-09 11:30 时空穿越者 阅读(91) 评论(0) 推荐(0)
摘要:初识lnheriitableThreadLocal lnheriitableThreadLocal继承自 ThreadLocal,其提供了一个特性,让子线程可以访问在父线程中设置的本地变量。 思考 在什么情况下子线程需要获取父线程的 threadlocal 变量呢,实现方式有哪些? 最简单的实现方式 阅读全文
posted @ 2021-08-09 09:18 时空穿越者 阅读(111) 评论(0) 推荐(0)
摘要:初识ConcurrentHashMap 针对并发容器中的ConcurrentHashMap,《java并发编程实战》一书有如下这样一段文字: ConcurrentHashMap的定义如下: public class ConcurrentHashMap<K,V> extends AbstractMap 阅读全文
posted @ 2021-08-01 16:46 时空穿越者 阅读(108) 评论(0) 推荐(0)
摘要:一、初识Exchanger 注意: 从上文描述,我们知道Exchanger用于在成对出现的线程之间(两个线程共有一个Exchanger) 二、示例 三、详解Exchanger 四、参考资料 (1)https://docs.oracle.com/javase/7/docs/api/java/util/ 阅读全文
posted @ 2021-07-10 10:25 时空穿越者 阅读(156) 评论(0) 推荐(0)