本文共 815 字,大约阅读时间需要 2 分钟。
单例模式在多线程环境下需要double check。
我们来看不double check的情况
public class Singleton { private static Singleton singleton = null; private Singleton() { System.out.println("单例生成"); } public static Singleton getInstance() { if (singleton == null) { // synchronized(Singleton.class) { // if(singleton == null) { singleton = new Singleton(); // } // } } return singleton; } public static void main(String[] args) { for(int i = 0; i < 5; i++) { new Thread(new Runnable() { @Override public void run() { Singleton s = Singleton.getInstance(); } }).start(); } }}
我们看注释了四条语句
结果如下图:
单例生成: 结果生成三个实例。
但是如果把四行注释去掉, 就会只有一个单例生成。
转载地址:http://mnzji.baihongyu.com/