什么是单例模式?
我们只允许某个类存在唯一的一个实例 - 换句话说,对于某个类我们只new 一次
为什么使用单例?
比如线程池, Metrics Object, 或者Logging Object etc. 单例可以用来减少对资源的损耗,因为对于相同目的操作我们应该尽可能的重用而不是重建。
如何使用单例?
方法一
package Chap5SingletonPattern;
public class Singleton_1 {
private static Singleton_1 instance;
private Singleton_1() {}
public static Singleton_1 getSingleton() {
if (instance == null) {
instance = new Singleton_1();
}
return instance;
}
}
这是最简单的方法,但是他是线程不安全的。 当多个线程同时访问 getSingleton 这个方法的时候,Singleton_1 可能会创建多个对象,这就打破了singleton pattern 的原则。
方法二
package Chap5SingletonPattern;
public class Singleton_2 {
private static Singleton_2 instance;
private Singleton_2() {}
public static synchronized S