我使用以下代码初始化EnumSet的同步实例:
private final Set<MyClass> instance = Collections.synchronizedSet(EnumSet.noneOf(MyClass.class));我有两个问题:
发布于 2014-06-23 16:29:18
来自javadoc
如果多个线程同时访问枚举集,并且至少有一个线程修改该集,则应该在外部同步它。这通常是通过同步一些自然封装枚举集的对象来实现的。如果不存在这样的对象,则应该使用Collections.synchronizedSet(java.util.Set)方法“包装”集合。最好在创建时这样做,以防止意外的不同步访问: 集s= Collections.synchronizedSet(EnumSet.noneOf(MyEnum.class));
所以我认为这是你能做的最好的了。
我也会像你一样保留Set final。奇怪的是,他们在javadoc中没有提到它。
编辑:要回答第一个问题,简短的回答是,长的回答,是的,但是你必须为同步付出代价。
https://stackoverflow.com/questions/24370792
复制相似问题