饿汉式单例
public class Singleton{
private static final Singleton singleton = new Singleton();
//限制产生多个
private Singleton(){}
//只能通过该方法获取实例
public static Singleton getInstance(){
return singleton;
}
//其他方法,尽量是static
public static void doSomething(){}
}
线程不安全的单例:懒汉式单例
public class Singleton{
private static Singleton singleton = null;
//限制产生多个
private Singleton(){}
//只能通过该方法获取实例
public static Singleton getInstance(){
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
}
懒汉式单例在高并发的情况下可能会出现问题
下面使用多线程来模拟
public class Main extends Thread{
@Override
public void run() {
System.out.println(Singleton.getInstance().hashCode());
}
public static void main(String[] args) {
Main[] mts = new Main[10];
for(int i = 0 ; i < mts.length ; i++){
mts[i] = new Main();
}
for (int j = 0; j < mts.length; j++) {
mts[j].start();
}
}
}
运行结果输出实例变量的hashCode值会出现不一致的情况