优缺点:
1). 借助JDK1.5中添加的枚举来实现单例模式,不仅能避免多线程同步问题,
而且还能防止反序列化重新创建新的对象。
2). 这种方式是Effective Java作者Josh Bloch提倡的方式。
3). 结论: 推荐使用
package com.China.singleton.example8;
public class SingletonTest08 {
public static void main(String[] args){
//Singleton1 s1 = Singleton1.getSingleton1();
//Singleton1 s2 = Singleton1.getSingleton1();
// s1, s2是同一个实例
//System.out.println(s1 == s2);
//System.out.println(s1.hashCode()+" "+s2.hashCode());
T t1 = new T();
new Thread(t1).start();
T t2 = new T();
new Thread(t2).start();
System.out.println(t1.s1 == t2.s1);
}
}
class T implements Runnable{
public Singleton1 s1 = null;
@Override
public void run() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
s1 = Singleton1.INSTANCE;
s1.sayHello();
System.out.println(s1.hashCode());
}
}
// 使用枚举,也可以实现单例,推荐使用
enum Singleton1{
INSTANCE;
public void sayHello(){
System.out.println("hello enum");
}
}