Integer getElement( List<Integer> list ) { int i = Random.getInt( list.size() ); return list.get( i ); }
解决方法
java.util.List不保证线程安全.列表可以在list.size()和list.get()之间由另一个线程更改.此外,内存不一致也是一个问题.
我可以想到三种解决方法:
>使用不可变列表. Collections.unmodifiableList(列表)很好,Guava的ImmuntableList更好.
> Synchronized清单.但是你必须在整个程序中同步列表实例.
>在java.util.concurrent中列出.这是一个复杂的并发解决方案.