单例模式是java设计模式之一,属于创建型模式,即一个类负责创建自己的对象,而且只有一个对象被创建,并且该类提供访问对象的方法,不需要实例化对象。下面介绍两种单例模式。。。
1.懒汉式
public class Singleton {
private static Singleton single=null;
private Singleton() {}//私有构造方法
public static Singleton getSingleton() {
if(single==null) {
single=new Singleton();
}
return single;
}
}
这种模式实现难度低,但多线程不安全,多线程不能正常工作,要使多线程安全,可以在访问方法前加上synchronzed同步关键字。
2.饿汉式
public class Singleton2 {
private static Singleton2 single=new Singleton2();
private Singleton2(){}//私有构造方法
public static Singleton2 getSingle() {
return single;
}
}
实现难度低,多线程安全。
3.双检索
public class dsvgwsvgbsgv {
private volatile static dsvgwsvgbsgv dd;
private dsvgwsvgbsgv() {}
public static dsvgwsvgbsgv getDD() {
if(dd==null) {
synchronized(dsvgwsvgbsgv.class) {
if(dd==null) {
dd=new dsvgwsvgbsgv();
}
}
}
return dd;
}
}
实现难度高,多线程安全。
4.登记式/静态内部类
public class dsvgwsvgbsgv {
private static class dsvgwsvgbsgvHolder{ //静态内部类
private static final dsvgwsvgbsgv INSTANCE=new dsvgwsvgbsgv();
}
private dsvgwsvgbsgv() {}
public static final dsvgwsvgbsgv getDD() {
return dsvgwsvgbsgvHolder.INSTANCE;
}
}
多线程安全
5.枚举
public enum dsvgwsvgbsgv {
INSTANCE;
public void whateverMethod() {}
}
jdk1.5后才引入enum,多线程安全,实现简单。