问题:jvm如何实现在并发状态下,静态资源只加载一次的。

在研究单例模式的时候,为了保证单例的懒加载是同步的,我们通常会选择一个duoble check的方法来保证只有第一次才new对象。
1.双重检测同步延迟加载 代码如下:
单例模式并发
关于volatile的作用在这里就是保证在new出对象的那一立马写入主存,同时通知其他线程的他们的cache是无效的,这样instance变量就满足了一致性,但我们知道volatile并不能保证原子性,就是当俩条线程在进行判断 if (instance == null) 的时候对象都没有被初始化,同时进入了if里面的代码块,如果没有synchronized锁,这个变量还是会被初始化俩次,加上synchronized,目的是避开过多的同步(因为这里的同步只需在第一次创建实例时才同步,一旦创建成功,以后获取实例时就不需要同获取锁了),在内部再一次判断对象有没有初始化,这样就能保证对象唯一一次初始化啦。

2.使用内部静态类来实现同步的
单例模式并发

相关文章: