[TL-5]并发编程专题
文章平均质量分 86
[TL-5]并发编程专题
萧 炎
这个作者很懒,什么都没留下…
展开
-
volatile内存语义以及实现 -volatile写和读对普通变量的影响
volatile写和读对普通变量的影响转载 2022-07-24 11:27:31 · 331 阅读 · 0 评论 -
彻底搞清楚HashMap中的threshold、capacity、size、modCount属性的意义和区别
https://www.processon.com/view/link/621d70145653bb070af9bdf2原创 2022-03-01 09:00:59 · 1108 阅读 · 3 评论 -
深入Hotspot源码与X86操作系统分析Valitaile变量与Lock前缀
一、JMM内存交互层面实现volatile修饰的变量的read、load、use操作和assign、store、write必须是连续的,即修改后必须立即同步回主内存,使用时必须从主内存刷新,由此保证volatile变量操作对多线程的可见性。二、Volatile在hotspot的实现在JVM层面,使用storeLoader内存屏障保证可见性。我们知道Java中有两种解释器:字节码解释器和模板解释器。接下来我们从这两种解释器层面来看看:字节码解释器实现JVM中的字节码解释器(bytecodeInte原创 2021-10-27 22:58:22 · 489 阅读 · 0 评论 -
[转] HashMap原理源码详解 - 来自美团高级开发
摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。简介Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和Tre转载 2021-03-08 23:13:48 · 264 阅读 · 0 评论 -
Java-并发线程中的常用设计模式精讲 & 消息积压处理解决方案
文章目录一、终止线程的设计模式1.1 Two-phase Termination(两阶段终止)模式——优雅的终止线程1.2 使用场景二、避免共享的设计模式2.1 Immutability模式——想破坏也破坏不了2.1.1 如何实现Immutability模式2.1.2 使用 Immutability 模式的注意事项2.2 Copy-on-Write(写时复制)模式应用场景2.3 Thread-Specific Storage 模式——没有共享就没有伤害2.3.1 应用场景一、终止线程的设计模式思考:在一原创 2021-12-13 21:27:35 · 861 阅读 · 0 评论 -
阿里Sentinel中间件中并发锁ReentrantLock & HashMap和Synchronized & ConcurrentHashMap的使用范例
大家都了解锁的使用,但是有时候就想看一些比较规范的代码,想确定或者说验证一下自己所了解的或者学到的是否是正确的,或者说标准的。毫无疑问,我也有这个担忧… 总会觉得自己了解到的使用是不是错误的,所以就想验证一下。下面对于基本锁ReentrantLock和Synchronized的使用是阿里中间件sentinel中的使用,希望可以让我们了解如何正确规范的使用锁。一、ReentrantLock & HashMapcom.alibaba.csp.sentinel.context.ContextUti原创 2021-12-12 12:09:39 · 470 阅读 · 0 评论 -
Future & CompleteFuture 剖析实战【掌握了future,就掌握了未来】
文章目录一、Callable&Future&FutureTask介绍1.1 Callable和Runnable的区别1.2 Future 的主要功能1.3 利用 FutureTask 创建 Future1.4 如何使用1.5 使用案例:促销活动中商品信息查询1.6 Future 注意事项1.7 Future的局限性二、CompletionService介绍2.1 CompletionService原理2.2 使用案例询价应用:向不同电商平台询价,并保存价格2.3 实现类似 Dubbo 的 F原创 2021-12-07 21:49:26 · 4998 阅读 · 2 评论 -
Java阻塞队列介绍、实战及其原理分析
文章目录一、阻塞队列介绍1.1 Queue接口1.2 BlockingQueue接口1.3 BlockingQueue常用方法示例二、阻塞队列特性2.1 阻塞2.2 是否有界三、应用场景四、常用阻塞队列精讲一、阻塞队列介绍1.1 Queue接口public interface Queue<E> extends Collection<E> { //添加一个元素,添加成功返回true, 如果队列满了,就会抛出异常 boolean add(E e); //添加原创 2021-12-07 11:26:23 · 689 阅读 · 0 评论 -
深入理解AQS之ReentrantReadWriteLock详解
文章目录一、读写锁介绍二、ReentrantReadWriteLock的使用2.1 读写锁接口ReadWriteLock2.2 ReentrantReadWriteLock类结构2.3 如何使用读写锁2.4 应用场景2.5 锁降级三、ReentrantReadWriteLock源码分析3.1 ReentrantReadWriteLock结构3.2 读写状态的设计3.3 HoldCounter 计数器3.4 写锁的获取3.5 写锁的释放3.6 读锁的获取3.7 读锁的释放一、读写锁介绍现实中有这样一种场景原创 2021-11-23 20:55:27 · 747 阅读 · 0 评论 -
深入AQS之Semaphorer & CountDownLatch & CyclicBarrier
文章目录一、Semaphore介绍1.1 Semaphore 常用方法构造器一、Semaphore介绍Semaphore,俗称信号量,它是操作系统中PV操作的原语在java的实现,它也是基于AbstractQueuedSynchronizer实现的。Semaphore的功能非常强大,大小为1的信号量就类似于互斥锁,通过同时只能有一个线程获取信号量实现。大小为n(n>0)的信号量可以实现限流的功能,它可以实现只能有n个线程同时获取信号量。PV操作是操作系统一种实现进程互斥与同步的有效方法。P原创 2021-11-22 23:53:12 · 505 阅读 · 0 评论 -
深入理解AQS之独占锁ReentrantLock源码分析
文章目录一、AQS原理分析1.1 什么是AQS1.2 同步等待队列1.3 条件等待队列二、ReentrantLock详解1.1 ReentrantLock的使用同步执行,类似于synchronized可重入可中断锁超时公平锁条件变量三、ReentrantLock源码分析NonfairSync - 加锁逻辑lock方法-加锁tryAcquire方法-尝试加一次锁(阻塞前的挣扎)acquire方法-挣扎入队addWaiter方法-创建队列并让节点入队(设计精髓)enq方法- 死循环100%克服各种条件,确保入队原创 2021-11-21 14:29:10 · 934 阅读 · 0 评论 -
并发编程之Synchronized底层实现原理和OpenJDK源码剖析
文章目录一、synchronized锁优化1.1 偏向锁批量重偏向&批量撤销原理应用场景JVM的默认参数值测试:批量重偏向测试:批量撤销总结1.2 自旋优化1.3 锁粗化1.4 锁消除1.5 逃逸分析(Escape Analysis)方法逃逸(对象逃出当前方法)线程逃逸((对象逃出当前线程)二、源码分析2.1 Synchronized轻量级锁源码分析2.2 Synchronized重量级锁加锁解锁执行逻辑关于偏向锁、轻量级锁、重量级锁存在的理解误区:1、无锁->偏向锁->轻量级锁-&原创 2021-11-19 10:17:41 · 1205 阅读 · 0 评论 -
并发锁机制之深入理解Synchronized & 锁膨胀 & 锁撤销
文章目录一、Java共享内存模型带来的线程安全问题1.1 临界区( Critical Section)1.2 竞态条件( Race Condition )二、synchronized的使用2.1 加锁方式2.2 解决之前的共享问题三、synchronized底层原理3.1 查看synchronized的字节码指令序列3.2 Monitor(管程/监视器)3.3 MESA模型3.3.1 wait()的正确使用姿势3.3.2 notify()和notifyAll()分别何时使用3.4 Java语言的内置管程sy原创 2021-11-18 14:04:48 · 2088 阅读 · 4 评论 -
并发编程之深入了解CAS
文章目录一、什么是 CAS二、CAS应用三、CAS源码分析三、CAS缺陷四、ABA问题及其解决方案4.1 什么是ABA问题4.2 ABA问题的解决方案一、什么是 CASCAS(Compare And Swap,比较并交换),通常指的是这样一种原子操作:针对一个变量,首先比较它的内存值与某个期望值是否相同,如果相同,就给它赋一个新值。CAS 的逻辑用伪代码描述如下:if (value == expectedValue) { value = newValue;} 以上伪代码描述了一个原创 2021-11-11 15:19:52 · 1135 阅读 · 0 评论 -
并发编程之深入理解OS、java线程
文章目录一、线程基础知识1.1 线程和进程思考问题:1.CAS涉及到用户模式到内核模式的切换吗?2.为什么说创建Java线程的方式本质上只有一种?Java线程和go语言的协程有什么区别?3.如何优雅的终止线程?4.Java线程之间如何通信的,有哪些方式?一、线程基础知识1.1 线程和进程...原创 2021-11-11 08:42:28 · 681 阅读 · 0 评论 -
内核模式(Kernel Mode)vs 用户模式(User Mode)
文章目录Kernel ModeUser ModeCPU保护模式在现代操作系统中,CPU实际上都在两种截然不同的模式中花费时间:Kernel Mode在内核模式下,执行代码可以完全且不受限制地访问底层硬件。它可以执行任何CPU指令和引用任何内存地址。内核模式通常为操作系统的最低级别、最受信任的功能保留。内核模式下的崩溃是灾难性的;他们会让整个电脑瘫痪。User Mode在用户模式下,执行代码不能直接访问硬件或引用内存。在用户模式下运行的代码必须委托给系统api来访问硬件或内存。由于这种隔离提供的保护原创 2021-11-10 19:24:48 · 6384 阅读 · 0 评论 -
Java有序性问题深入分析 & 内存屏障多层面深入理解
文章目录一、有序性问题深入分析二、指令重排序2.1 volatile重排序规则2.2 JMM内存屏障插入策略2.3 JSR133规范三、深入理解内存屏障3.1 JVM层面的内存屏障3.2 硬件层内存屏障一、有序性问题深入分析思考:下面的Java程序中x和y的最终结果是什么?public class ReOrderTest { private static int x = 0, y = 0; private static int a = 0, b = 0; public原创 2021-11-01 21:23:43 · 318 阅读 · 0 评论 -
从Hotsport源码和操作系统级别深入理解volatile关键字与内存屏障(Lock前缀)
文章目录一、volatile的内存语义1.2 volatile的特性1.2 volatile写-读的内存语义1.3 volatile可见性实现原理1.3.1 JMM内存交互层面实现1.3.2 汇编层面volatile的实现 (java代码中的使用和验证)1.3.3 硬件层面实现二、volatile在hotspot的实现2.1 字节码解释器实现2.2 模板解释器实现三、volatile在linux系统x86中的实现lock前缀指令的作用四、从硬件层面分析Lock前缀指令五、总结与疑问一、volatile的内原创 2021-11-01 21:02:04 · 921 阅读 · 0 评论 -
CPU高速缓存(Cache Memory)
文章目录CPU高速缓存多CPU多核缓存架构缓存一致性(Cache coherence)缓存一致性的要求写传播(Write Propagation)事务串行化(Transaction Serialization)一致性机制(Coherence mechanisms)总线仲裁机制总线锁定缓存锁定总线窥探(Bus Snooping)工作原理窥探协议类型一致性协议(Coherence protocol)MESI协议伪共享的问题linux下查看Cache Line大小避免伪共享方案CPU高速缓存CPU缓存即高速缓原创 2021-10-31 11:36:34 · 4177 阅读 · 0 评论 -
巩固剖析并发基础:并发三大特性详解 & 代码实例分析可见性问题 & 深入了解JMM模型
文章目录一、并发和并行二、并发三大特性2.1 可见性2.2 有序性2.3 原子性三、Java内存模型(JMM)3.1 JMM定义3.2 JMM与硬件内存架构的关系3.3 内存交互操作3.3 JMM的内存可见性保证四、可见性问题深入分析4.1 使用volatile变量修饰属性4.2 使用storeFence4.3 使用synchronized关键字4.4 System.out.println(flag);4.5 Thread.yield()方法4.5 使用Integer变量4.6 什么也不做,让方法执行的时间原创 2021-10-28 08:48:10 · 510 阅读 · 0 评论