同步(synchronized)getInstance方法
<span style="font-size:18px;">/**
* 同步(synchronized)getInstance方法
*
*/
public class Singleton {
public static Singleton instance = null;
//把构造方法写成私有的,防止在外面new对象,保证对象的唯一性;
private Singleton() {
}
/**在静态方法中实例化静态对象。
* 1、多线程下,保证线程安全加synchronized,消耗资源多,调用次数要少
*
*
* @return
*/
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
};
}
</span>
“急切”创建实例
<span style="font-size:18px;">public class Singleton2 {
/**
* 1、多线程下,急切创建,保证线程安全,在类创建时创建对象。
*
*/
public static Singleton2 instance2 = new Singleton2();
//把构造方法写成私有的,防止在外面new对象,保证对象的唯一性;
private Singleton2() {
}
public static synchronized Singleton2 getInstance() {
if (instance2 == null) {
instance2 = new Singleton2();
}
return instance2;
};
}
</span>
双重检查加锁
<span style="font-size:18px;">public class Singleton3 {
public volatile static Singleton3 instance3 = null;
//把构造方法写成私有的,防止在外面new对象,保证对象的唯一性;
private Singleton3() {
}
/**在静态方法中实例化静态对象。
* 1、多线程下,双重检查加锁法
*
*/
public static Singleton3 getInstance() {
if (instance3 == null) {
synchronized (Singleton3.class) {
instance3 = new Singleton3();
}
}
return instance3;
};
}
</span>