![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发编程的艺术
孵化
这个作者很懒,什么都没留下…
展开
-
(三)Java内存模型
1. Java内存模型基础 1)并发编程的两个问题 线程通信:以何种机制来交换信息(共享内存、消息传递); 线程同步:怎么控制线程之间操作的先后顺序(); 2) 内存模型的抽象结构 Java中,所有实例域、静态域和数组元素都存储在堆内存,堆内存在线程之间共享。 线程之间通信两个步骤: 线程A本地内存刷新到主内存; 线程B读取刷新后的变量; 3) 源代码到编译器的重排序 为了提高性能,编...原创 2020-03-16 11:26:08 · 60 阅读 · 0 评论 -
(二)Java并发机制底层实现原理
1. volatile的原理 volatile,轻量级的synchronized,保证的是一个线程修改后,另一个线程立马可见的可见性,不会引起上下文切换。 底层实现 volatile Singleton instance = new Singleton() JIT编译器生成的指令代码如下: 0x01a3deld: mov $0x0,0x1104800(%esi); 0x01a3de24: ...原创 2020-03-16 10:38:17 · 79 阅读 · 0 评论 -
(一)并发编程的挑战
并发编程的目的是为了充分利用硬件资源,让程序跑的更快,但并不意味着开启更多的线程就能够实现这个目的,还需要考虑上下文切换、死锁的问题。 1.1 上下文切换 CPU通过时间片分配的方式来同时执行多个任务,一个任务执行一个时间片以后保存当前任务信息,然后加载另一个任务信息并切换到另一个任务,这就是一次上下文切换的过程。 减少上下文切换次数方法: 无所并发编程,多线程竞争锁会引起上下文切换,可以采取分...原创 2020-03-15 15:14:42 · 84 阅读 · 0 评论