并发编程
文章平均质量分 92
秋忆侬sonny
成功来自于脚踏实地,更来自于自信
展开
-
ConcurrentHashMap 实现分析(JDK1.7&JDK1.8)
ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成。Segment 是一种可重入锁(ReentrantLock),在 ConcurrentHashMap 里扮演锁的角色;HashEntry 则用于存储键值对数据。一个 ConcurrentHashMap 里包含一个 Segment 数组。Segment 的结构和 HashMap 类似,是一种数组和链表结构。原创 2022-11-25 23:24:48 · 427 阅读 · 0 评论 -
HashMap底层原理(JDK1.8)
HashMap是由数据+链表+红黑树的形式组成的。数组:是一块连续的存储空间,存储的每一个元素都有自己的下标。链表:每一个元素存储下一个元素的内存地址,链式存储,存储元素离散。HashMap底层的数据结构是hash散列表,结合了数组+链表两种数据结构。采用Node(继承自Entry)数组来存储key-value的键值对,一个Node对应一个键值对,Node类是一个单向链表的结构,通过next(Node类型)指针连接下一个Node节点(解决hash冲突问题)。原创 2022-11-23 22:58:06 · 1026 阅读 · 0 评论 -
线程池底层原理
线程池是一种类似于 Mysql 的池化思想管理工具。Java 中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。原创 2022-11-17 22:15:38 · 228 阅读 · 0 评论 -
ReentrantLock使用及其原理解析
2 ReentrantLock详解ReentrantLock是一种基于AQS框架的应用实现,是JDK中的一种线程并发访问的同步手 段,它的功能类似于synchronized是一种互斥锁,可以保证线程安全。相对于 synchronized, ReentrantLock具备如下特点:Synchronized与ReentrantLock区别:可重入可中断锁超时公平锁、非公平锁ReentrantLock 的构造函数中,默认的无参构造函数将会把 Sync 对象创建为 NonfairSync 对象,这是一个“原创 2022-11-11 22:33:22 · 275 阅读 · 0 评论 -
从代码和底层探究Synchronized锁实现
并发编程能充分利用CPU资源,提高用户响应时间,但同时共享内存模型也带来了线程安全问题。当两个线程同时对一个共享静态变量操作时,一个做自增操作,一个做自减操作,能达到想要的结果吗发现程序并没达到想要的结果零。之前我们分析过,加了 volatile 关键字的变量能保证可见性,但此时多线程中并未达到“可见性”效果,我们在编译器中安装一个jclasslib,查看JVM中的字节码指令。increment方法的i++操作字节码指令:decrement方法的i–操作字节码指令:单线程下这些字节码指令顺序执行原创 2022-11-07 22:33:50 · 228 阅读 · 0 评论 -
探究CAS底层原理
CAS(Compare And Swap,比较与交换),CAS的操作过程包含三个运算符:内存地址V,期望值A和新值B,操作时如果地址上的值等于期望值A,则将地址上的值赋为新值B,否则不做任何操作。原创 2022-11-02 22:08:36 · 292 阅读 · 0 评论 -
一文带你深入理解并发编程底层原理
操作系统会议进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。线程是进程中的实体,一个进程可拥有多个线程,一个线程必须有一个父进程,线程是CPU调度的最小单位。从图中可以看出线程是进程一个子集,线程存在于进程内,而进程是相互独立的。进程拥有共享的内存空间,供内部线程共享。线程是更加轻量的,切换成本要比进程上下文切换低。原创 2022-10-30 00:02:13 · 565 阅读 · 0 评论