Java并发编程入门 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

并发下的单例的准备

然而不管是第一种单例还是第二种单例,都是含有缺陷的,在单进程中,这个缺陷是不存在的,但是在高并发下就会出现。因为高并发的时候回存在两个线程同时调用一个方法,这个时候单例就不在单例了,会产生一个以上的实例。对于这个问题,单例模式就要改进一下了。

首先我们先看两个关键字:

1.synchronized

2.volatile

对于这两个关键字,看过前面内容的人应该很明白,是什么了吧?

synchronized:同步锁,用来解决线程之间同步的问题,他会给线程正在访问的资源加锁使线程更加安全。

volatile:这个可以说是一个轻量的锁的实现,但是本质不是锁,不过他有一个作用是使指令不重排序,也就是按照要求一步一步执行应该执行的指令。为什么要禁止指令重排序呢?在Java程序中我们new一个实例的时候,也许只是一句话,但是在CPU中执行的时候确实很多步骤,所以多线程并发先,就会造成new出对象的不完整性。

仔细想一想如上关键子对于并发下有什么帮助?