标签:其他 method return att 返回 ... enum 默认 注释
直接上代码(代码注释比较完整):
第一种:
package pattern.singleton.doublecheck;
public class Singleton {
// 私有化默认构造方法,防止外部生成此实例
private Singleton(){}
// 声明此单一实例
// volatile: 能够及时通知其他线程,更新其线程缓存数据
private volatile static Singleton INSTANCE;
// 向外提供此单一实例
public static Singleton getInstance(){
// 如果INSTANCE为空,准备去上锁及实例化赋值
// 如果不为空,那么直接去返回实例,防止了要再次上锁的性能问题
if(INSTANCE == null) {
// 上锁 因为是静态方法,需要上类锁
synchronized(Singleton.class) {
// 再次判断INSTANCE是否为空,因为可能上一个线程已经实例化并赋值过了
if(INSTANCE == null) {
// 实例化并赋值
INSTANCE = new Singleton();
}
}
}
// 返回实例
return INSTANCE;
}
// what ever field(s)...
// what ever method(s)...
}
第二种:
package pattern.singleton.innerclass;
public class Singleton {
// 私有化默认构造方法,防止外部生成此实例
private Singleton(){}
// 声明私有静态内部类,包含外部类的静态不可变实例
private static class innerClass{
private static final Singleton INSTANCE = new Singleton();
}
// 向外提供此单一实例
public static Singleton getInstance() {
return innerClass.INSTANCE;
}
// what ever field(s)...
// what ever method(s)...
}
第三种:
package pattern.singleton.enume;
public enum Singleton {
// 因为一个enum成员相当于一个实例对象,直接通过Singleton.INSTANCE来获取
INSTANCE;
// what ever field(s)...
// what ever method(s)...
}
标签:其他 method return att 返回 ... enum 默认 注释
原文地址:http://www.cnblogs.com/2017-tujiansblog/p/6726968.html