枚举是创建单身人士的好。我知道枚举方法不是线程安全的,所以我试图让它是线程安全的。任何人都可以确认这个实现是否正确。使用静态和易变的这么多地方是否可以,并且可以优化?由于内部类是私有的,所以我必须在枚举中创建函数来访问内部类的功能。可以优化吗?线程安全枚举单身人士
import java.util.Date;
public enum SingletonWithEnum {
INSTANCE;
private static class Singleton{
private static volatile int count;
private static volatile Date date;
public static int getCount() { return count;}
public static void setCount(int countParam) { synchronized(Singleton.class){ count = countParam; }}
public static Date getDate() { return date;}
public static void setDate(Date dateParam) { synchronized(Singleton.class){ date = dateParam;}}
public static String printObject() {
return "Singleton [count=" + getCount() + ", date=" + getDate() + "]";
}
}
public int getCount() { return Singleton.getCount();}
public void setCount(int countParam) {Singleton.setCount(countParam);}
public Date getDate() { return Singleton.getDate();}
public void setDate(Date dateParam) {Singleton.setDate(dateParam);}
public String toString(){return Singleton.printObject();}
};
我正在像这样使用它。
SingletonWithEnum object1 = SingletonWithEnum.INSTANCE;
object1.setCount(5);
object1.setDate(new Date());
“我知道枚举方法不是线程安全的” - 好吧,只有当你*使它们不安全。枚举通常是无状态的,此时它们完全是线程安全的。 – 2015-02-06 15:25:52
在这里使用枚举对我来说似乎很奇怪。他们打算列举一些东西,所以这是滥用它。 – 2015-02-06 16:33:33
@IngoBürk将单个实例的枚举用作单例是一种非常常见的模式。实际上,枚举在JVM中只创建一次,所以完美地代表单身人士。有关该主题的更多信息,请参阅Josh Bloch的“Effective Java”。 – 2015-02-06 16:44:56