import java.util.Random;
import java.util.concurrent.*;
/**
* 第1种方式:懒汉式,线程不安全
*/
class Singleton1{
private static Singleton1 instance;
private Singleton1() {}
public static Singleton1 getInstance() {
if (instance == null) {
instance = new Singleton1();
}
return instance;
}
}
/**
* 第2种方式:懒汉式,线程安全
*/
class Singleton2{
private static Singleton2 instance;
private Singleton2() {}
public static synchronized Singleton2 getInstance() {
if (instance == null) {
instance = new Singleton2();
}
return instance;
}
}
/**
* 第3种方式:饿汉式,线程安全,基于classloder机制避免了多线程的同步问题
* 在类初始化时即实例化instance
*/
class Singleton3{
private static Singleton3 instance = new Singleton3();
private Singleton3() {}
public static Singleton3 getInstance() {
return instance;
}
}
/**
* 第4种方式:饿汉式的变种,线程安全
* 跟第3种方式差不多,都是在类初始化时即实例化instance
*/
class Singleton4{
private static Singleton4 instance;
static {
instance = new Singleton4();
}
private Singleton4() {}
public static Singleton4 getInstance() {
return instance;
}
}
/**
* 第5种方式:静态内部类,线程安全
*/
class Singleton5{
private static class SingletonHolder{
private static final Singleton5 instance = new Singleton5();
}
private Singleton5() {}
public static final Singleton5 getInstance() {
return SingletonHolder.instance;
}
}
/**
* 第6种方式:枚举
*/
enum Singleton6{
INSTANCE;
public static Singleton6 getInstance() {
return INSTANCE;
}
}
/**
* 第7种方式:双重校验锁
*/
class Singleton7{
private sta
单例模式的七种实现方式
最新推荐文章于 2022-08-21 11:41:39 发布