public class Singleton { private volatile static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } 为什么非要写第一个if
时间: 2023-06-10 15:08:23 浏览: 70
Java设计模式之单态模式(Singleton模式)介绍
这是因为当多个线程同时访问 `getInstance()` 方法时,如果没有第一个 `if` 判断,那么每个线程都会进入同步代码块,这就会造成资源浪费和性能问题。因此,第一个 `if` 判断可以确保只有第一次调用 `getInstance()` 方法时才会进入同步代码块,而后续的调用直接返回已经创建好的实例,避免了不必要的同步开销。
此外,还需要使用 `volatile` 关键字,确保线程之间的可见性,避免出现不同线程对同一变量的读写操作的冲突问题。
阅读全文