java并发编程
文章平均质量分 86
中间件兴趣圈
《RocketMQ技术内幕》一书作者、RocketMQ开源社区优秀布道师、CSDN2020博客之星TOP2,主打成体系剖析java中间件,已发布RocketMQ、Kafka、Dubbo、Sentinel、Canal、ElasticJob、ElasticSearch等15个专栏。
展开
-
源码分析Java并发(JUC框架)专栏
java多线程是JAVA高阶编程最需掌握的基本功,本系列从源码的角度对JUC(java 并发工具包)进行详细剖析,一起探讨java多线程并发相关知识。1、java并发锁ReentrantLock源码分析一 可重入支持中断锁的实现原理2、java并发锁机制-ReentrantLock Condtion准备篇之Object.wait,Object.notify与Condtion3、java并发锁...原创 2019-11-25 21:57:37 · 11592 阅读 · 2 评论 -
全链路压测必备基础组件之线程上下文管理之“三剑客”
本节目录1、ThreadLocal详解1.1 ThreadLocal存储结构1.2 源码分析ThreadLocal1.2.1 源码分析get1.2.2 源码分析set1.3 ThreadLocal局限性2、InheritableThreadLocal2.1 类图2.2 线程上下文环境如何从父线程传递到子线程2.3 验证InheritableThreadLocal的特性2.4 Inheritable...原创 2019-07-28 18:39:41 · 1736 阅读 · 3 评论 -
java并发容器ConcurrentHashMap源码分析
1、ConcurrentHashMap 与 HashTableHashTable 是 HashMap 的线程安全版本,使用的是 HashTable 的对象锁,同一时刻只能有一个线程 新增元素,获取元素。锁等待多,并发度低。而 ConcurrentHashMap 采用的是锁分段机制,就是用多把锁,让每把锁管理一部分数据。怎么实现的呢?引入了段(Segment)数据结构。我们不妨来回忆一下Ha...原创 2016-11-29 12:16:22 · 2644 阅读 · 0 评论 -
Netty学习之旅------线程模型前置篇Reactor反应堆设计模式实现(基于java.nio)
1、Reactor反应堆设计模式1.1 单线程模型 单线程模型Reactor(此图来源与网络)下面以java nio为基础,实现Reactor模型。Nio服务端代码:package threadmode.r1;import java.io.IOException;import java.net.InetSocketA...原创 2017-02-14 15:29:17 · 7330 阅读 · 10 评论 -
Netty学习之旅----ThreadLocal原理分析与性能优化思考(思考篇)
1、java.lang.ThreadLocal概况ThreadLocal,本地线程变量,每个线程保留着一个共享变量的副本。其实我不太认可每个线程保存共享变量的一个副本这个说法,而是ThreadLocal是线程上下文环境的一种实现方式而已。就以数据库事务这一常用场景来举例说明,比如每个线程需要访问数据库,就需要获取数据库的连接Connection对象,在实际中,我们会用数据库连接池来重复利用Co...原创 2017-02-09 11:49:26 · 8378 阅读 · 0 评论 -
java多线程Thread join与CountDownLatch源码分析
1、Thread join方法详解首先,对于JAVA的一些基础知识,工作年限到了一定时间后,尽量不要一来就百度查询,比如thread join的作用,我们不妨先看一看join方法的源码,先试着自己理解,然后再去查询别人的理解,举一反三,美哉美哉。join方法的声明与源码如下:/** * Waits at most {@code millis} milliseconds fo...原创 2016-12-20 09:36:56 · 2441 阅读 · 1 评论 -
java并发编程之源码分析ThreadPoolExecutor线程池实现原理
1、ThreadPoolExecutor概述由于本人英语水平不高,为了不误导大家,我将源码中的注释复制下来,我不翻译原文,我从入学6个视角试图窥探一下ThreadPoolExecutor全貌。创建线程池的方式 核心线程数、最大线程数 线程的创建 线程的Keep-alive(保持存活的空闲时间) 队列 任务的丢弃策略/** * An {@link ExecutorServic...原创 2016-12-29 16:25:37 · 4906 阅读 · 1 评论 -
java并发锁ReentrantReadWriteLock读写锁源码分析
1、ReentrantReadWriterLock 基础所谓读写锁,是对访问资源共享锁和排斥锁,一般的重入性语义为如果对资源加了写锁,其他线程无法再获得写锁与读锁,但是持有写锁的线程,可以对资源加读锁(锁降级);如果一个线程对资源加了读锁,其他线程可以继续加读锁。java.util.concurrent.locks中关于多写锁的接口:ReadWriteLock。public inte...原创 2016-11-22 15:36:13 · 25697 阅读 · 9 评论 -
java并发锁ReentrantLock源码分析二之Condition实现原理
1、java.util.concurrent.locks.Condition接口一览voidawait()throwsInterruptedException;voidawaitUninterruptibly();longawaitNanos(longnanosTimeout)throwsInterruptedException;booleanawait(lon...原创 2016-11-14 13:55:40 · 5505 阅读 · 13 评论 -
java并发锁机制-ReentrantLock Condtion准备篇之Object.wait,Object.notify与Condtion
根据网上的说法,jdk并发包中的 Condition await 与 signal 实现了 Object.wait notify 语义。以下总结,是基于Condition await,singal方法的实现原理总结出来的:monitorObject.wait,该方法调用必须在临界区中(锁保护的代码段)被调用,线程如果在临界区中调用监视器的wait方法,然后线程会释放占有监视器monitorOb...原创 2016-11-11 16:59:48 · 1626 阅读 · 2 评论 -
java并发锁ReentrantLock源码分析一 可重入支持中断锁的实现原理
本文将详细介绍ReentrantLock 的实现原理。在进入源码分析之前,我先提出如下观点:希望大家纠正与讨论:如果一个节点的状态设置为Node.SIGNAL,则说明它有后继节点,并处于阻塞状态。 ReentantLock的head节点,如果不为空,在该节点代表的线程为锁的占有者。这是对CLH算法的改进之处。众所周知,CLH算法的head节点为假节点,不代表任何线程。 Reentan...原创 2016-11-08 17:40:51 · 10281 阅读 · 10 评论 -
AtomicIntegerArray源码分析与感悟
在讲AtomicIntegerArray之前,我先通过AtomicInteger阐述一下juc原子包的实现原理: // 注意是volatile类型的变量,可见性(一个线程对该值修改后,会马上同步到主内存,其//他线程能马上看到新值)private volatile int value; public final int getAndSet(int newValue) { ...原创 2016-10-31 11:09:54 · 3421 阅读 · 1 评论