高并发编程
文章平均质量分 92
g-Jack
硕士毕业于北京交通大学,拥有6年开发工作经验,热爱编程,乐于分享,擅长微服务和中间件。
展开
-
并发三大特性——可见性
引言熟悉并发的童鞋们都知道,并发编程有三大特性,分别是可见性、有序性、原子性,今天我们从一个demo中分析可见性,以及我们如何保障可见性。JMM模型在我们分析可见性之前,我们需要了解一个概念,就是JMM模型,也就是我们常说的javamemorymodel .java虚拟机规范中定义了Java内存模型,用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现程序在各个平台上达到一致的并发效果,JMM规范了java虚拟机与计算机内存是如何协同工作的。规定了一个线程如何和何时可以看到由其他线程修改过..原创 2021-10-28 23:07:22 · 27357 阅读 · 2 评论 -
【高并发趣事三】——双重检查锁定与延迟初始化
一、引言在JAVA多线程程序中,有时候需要采用延迟初始化来降低初始化类和创建对象的 开销。双重检查锁定就是延迟 初始化技术。二、双重检查锁定的由来在jav进程中,有时候可能 需要推迟一些高开销对象的初始化操作,并且只有在使用这些对象时才进行初始化,此时,程序员可能会采用延迟初始化。还有一个经典的使用场景就是单利模式下的,为了提高性能 ,采用双重检查锁定模式。但是在使用的过程中我们需要一些技巧,否则很容易出现问题。上面代码在多线程环境下,我们很容易出现问题,所以改进代码。由于对ge原创 2020-07-23 17:53:19 · 341 阅读 · 0 评论 -
【高并发趣事二】——JMM及程序中的幽灵
引言在我们开始写正文之前,我们先看几行代码,各位读者是否能看出问题呢?第一段: public static void main(String[] args) { int v1 = 1073741827; int v2 = 1431655768; System.out.println(v1 + v2); }在各位读者看来,应该输出什么呢?第二段public class ThreadTestService { int原创 2020-07-23 11:35:25 · 267 阅读 · 0 评论 -
【高并发趣事一】——Amdahl(阿姆达尔定律)与Gustafson(古斯塔夫森定律)
在高并发程序设计中有非常重要的两个定律,这个两个定律从不同角度诠释了加速比与系统串行化程度、CPU核心数之间的关系,他们使我们在做高并发程序设计的理论依据:Amdahl(阿姆达尔定律) Gustafson(古斯塔夫森定律)一、Amdahl(阿姆达尔定律)1.1 加速比定义 加速比 = 优化前系统耗时 / 优化后系统耗时所谓加速比就是优化前的耗时和优化后的耗时的比值。加速比越高,表明优化效果越明显。下图是该公式的推导过程:其中n表示处理器个数,T表示时间,T1表示优化前耗时(...原创 2020-07-19 19:49:53 · 2690 阅读 · 0 评论