jil*_*t3d 3 java multithreading enumset
我使用以下代码初始化EnumSet的同步实例:
private final Set<MyClass> instance = Collections.synchronizedSet(EnumSet.noneOf(MyClass.class));
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
好吧,来自javadoc:
如果多个线程同时访问枚举集,并且至少有一个线程修改了该集,则应该在外部进行同步.这通常通过在自然封装枚举集的某个对象上进行同步来实现.如果不存在此类对象,则应使用Collections.synchronizedSet(java.util.Set)方法"包装"该集合.这最好在创建时完成,以防止意外的不同步访问:
Set s = Collections.synchronizedSet(EnumSet.noneOf(MyEnum.class));
所以我认为这是你能做的最好的事情.
我也会Set final像你一样保持原样.奇怪的是他们没有在javadoc中提到它.
编辑:回答第一个问题,简短回答是,答案很长,是的,但你必须支付同步的价格.
| 归档时间: |
|
| 查看次数: |
680 次 |
| 最近记录: |