Java并发编程系列
文章平均质量分 95
包括基本概念,如线程、锁、并发集合,以及更复杂的主题,如线程池、并发设计模式、Java Memory Model。我们会详细讨论Java的并发API,包括java.util.concurrent包中的类,以及如何使用它们构建并发应用程序。此外,我们也将介绍并发问题,如死锁、竞态条件,以及如何避免它们
冰点.
《Redis从入门到精通2023版》作者-
日拱一卒无有尽,功不唐捐终入海。路漫漫其修远兮。吾将上下而求索
展开
-
java对象半初始化问题是怎么回事
Java对象的创建过程包括内存分配、执行构造方法进行初始化和设置堆内存中的引用地址。在多线程环境下,由于Java内存模型允许指令的重排序,可能导致一个线程看到了另一个线程创建的对象的引用地址,但是这个对象还没有完成初始化。此时,我们称这个对象为半初始化对象。原创 2023-09-25 22:04:17 · 437 阅读 · 3 评论 -
高并发下双重检测锁DCL指令重排问题剖析
双重检查锁定(Double-Checked Locking)是一种并发设计模式,该模式减少了同步的开销,提高了执行效率。该模式通过两次检查锁定,确保被检查的代码的线程安全性。在第一次检查中,如果发现变量不满足条件,才进行加锁操作。然后在锁定的区块内再进行一次检查,如果仍不满足条件,才进行相关操作。指令重排是为了提高处理器性能,允许编译器和处理器调整指令的执行顺序。一旦保证最终执行结果与代码顺序执行的结果一致,即使没有按照代码原有的顺序执行也不影响。volatile是Java提供的一种轻量级的同步机制。原创 2023-09-25 21:31:22 · 626 阅读 · 0 评论 -
聊聊Hotspot内存屏障如何禁止指令重排
JVM的内存模型,也就是Java内存模型(Java Memory Model,JMM),主要是围绕在并发过程中如何处理原子性、可见性和有序性这三个特性来建立的模型。在Java中,所有实例域、静态域和数组元素都存储在堆内存中,并且在多个线程之间共享。本地变量、方法定义的参数以及异常处理器参数不会在线程之间共享,它们不会有数据竞争的问题。线程对这些共享数据的操作必须通过主内存来协调。线程之间不能直接通信,线程对共享数据的所有读写都必须通过主内存进行。原创 2023-09-22 23:47:50 · 174 阅读 · 5 评论 -
深入理解ThreadPoolExecutor线程池工作原理源码解析
背景:最近技术交流群里有个新同学,面试的时候被问到线程池相关的问题,答的不是很好,群里针对线程池的问题,也有激烈的讨论。所以借此写一个简单的源码解析,帮助大家进行记忆学习,知其然知其所以然。我们先来了解一下线程池的本质,其实就是为了复用多线程场景下,线程创建销毁过程中的资源开销。而利用池化技术设计的一套线程池模型,就和我们常见的连接池、对象池思想类似,主要进行资源复用,减少资源开销。所以线程池模型的本质是对任务和线程的管理,让干活的和活进行分离。原创 2023-06-27 19:55:05 · 564 阅读 · 34 评论