![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发
-yanhui-
这个作者很懒,什么都没留下…
展开
-
Java并发之CPU原子操作、Java原子操作
原子(atomic)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为“不可被中断的一个或一系列操作”。无论是多核cpu的原子操作还是Java的原子操作,其实本质上都是多个操作去操作同一片内存的数据。首先整理学习一下多核CPU的原子操作,然后类比着去学习Java多线程是如何实现原子操作的。一、多核CPU的原子操作A、B、C分别是三个CPU,主内存中存储的...原创 2018-11-29 16:47:57 · 603 阅读 · 0 评论 -
Java并发偏向锁、轻量级锁、重量级锁、synchronized和volatile的实现原理
读Java并发编程的艺术学习整理。1. 上下文切换CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的,时间片一般是几十毫秒(ms)。CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任...原创 2018-11-28 11:47:03 · 1357 阅读 · 1 评论 -
HashMap由并发引起的链表死循环
关于HashMap的结构介绍参考这篇文章在java1.8之前的HashMap是基于数组+链表的形式实现,所以在并发时出现死循环的情况还是比较常见的。重现死循环的情况假设现在有两个线程Thread1和Thread2,Thread1执行在执行HashMap的扩容过程时,当扩容没有完成就被CPU暂停(如下图):此时CPU暂停Thread1暂停,切换到Thread2上,假设Thread2执行的插...原创 2018-12-03 18:41:12 · 1927 阅读 · 1 评论