一、饿汉式
//饿汉式
class Singleton{
public static final Singleton SINGLETON=new Singleton();
private Singleton() {
}
}
1.类加载的时候创建对象
//枚举类饿汉式
enum Singleton1{
SINGLETON;
}
2.枚举类默认是static的
//静态代码块的饿汉式
class Singleton2{
public static final Singleton2 SINGLETON2;
private Singleton2() {
}
static{
SINGLETON2=new Singleton2();
}
}
3.使用静态代码块和第一种相似,但此种方式更具拓展性
二、懒汉式(延时加载)
//懒汉式(非线程安全的)
class Singleton3{
private static Singleton3 singleton3;
private Singleton3() {
}
public static Singleton3 getSingleton3() {
if(singleton3==null) {
singleton3=new Singleton3();
}
return singleton3;
}
}
1.在单线程环境下是线程安全的,但是在多线程环境下是非线程安全的
//懒汉式(线程安全的)
class Singleton4{
private static Singleton4 singleton4;
private Singleton4() {
}
public static Singleton4 getSingleton4() {
if(singleton4==null) {
synchronized (Singleton4.class) {
if(singleton4==null) {
singleton4=new Singleton4();
}
}
}
return singleton4;
}
}
2.此方法是线程安全的,利用synchronized关键字实现(外围的if判读是为了提升程序效率)
此上是对单例模式的总结。