我正在用Java制作游戏。游戏中的每个敌人都是一个线程,他们不断循环游戏的数据结构(我总是使用Vector类)。
最近我得到了“ConcurrentModificationException”,因为当一个Thread循环遍历时,正在向Vector添加/删除元素。我知道有一些策略可以避免添加/删除问题(我实际上使用了一些来避免删除问题,但我仍然遇到“添加”问题)。
我听说java支持一个避免ConcurrentModificationException的Vector / List。
你知道这个结构可能是什么吗? 感谢。
答案 0 :(得分:6)
查看java.util.concurrent,它有你想要的东西。
答案 1 :(得分:4)
CopyOnWriteArrayList。但仔细阅读其javadoc并考虑是否在实践中它给出了您期望的行为(检查内存一致性效果),以及性能开销是否值得。除了与ReentrantReadWriteLock同步之外,AtomicReferences和Collections.synchronizedList可能会对您有所帮助。