话不多说直接上代码
package tesetSingle;
public class Test {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
new Thread(()->{
//Hungry.getInstance();
LazyMan instanceL1 = LazyMan.getInstance();
LazyMan instanceL2 = LazyMan.getInstance();
System.out.println(instanceL1 == instanceL2);
System.out.println(instanceL1.equals(instanceL2));
EnumSingle instance = EnumSingle.INSTANCE.getInstance();
EnumSingle instance2 = EnumSingle.INSTANCE.getInstance();
System.out.println(instance == instance2);
System.out.println(instance.equals(instance2));
},String.valueOf(i)).start();
}
}
}
//饿汉式单例模式
class Hungry{
private Hungry(){
System.out.println(Thread.currentThread().getName()+"\tok");
}
private static Hungry hungry = new Hungry();
public static Hungry getInstance(){
return hungry;
}
}
//懒汉式
class LazyMan{
private LazyMan(){
System.out.println(Thread.currentThread().getName()+"\tok");
}
private volatile static LazyMan lazyMan;
public static LazyMan getInstance(){
if (lazyMan == null){
synchronized (LazyMan.class){
if (lazyMan == null){
lazyMan = new LazyMan();
}
}
}
return lazyMan;
}
}
//枚举 单例模式
enum EnumSingle{
INSTANCE;
public EnumSingle getInstance(){
return INSTANCE;
}
}