Java游戏中链接列表的迭代器

时间:2012-11-23 04:57:50

标签: java multithreading thread-safety linked-list

我在android中使用OpenGl,他们有一个叫做draw的回调方法,在我的控制下调用它。 (如果我没有弄错的话,设备可以处理得最快)我有一个“GameObjects”列表,它有一个.draw方法和一个.update方法。我有两个不同的线程来处理每个。所以,问题是,我可以在两个不同的线程中使用两个不同的方法声明两个不同的迭代器,这两个迭代遍历相同的链接列表吗?如果是这样,每次我想要一个新的迭代器时我是否只是声明ListIterator<GameObject> l = objets.listIterator()并且它不会干扰其他迭代器?

3 个答案:

答案 0 :(得分:1)

是的,您可以为同一个列表提供多个迭代器。他们不会互相干扰。

你不能做的是在迭代器仍处于活动状态时修改列表(我的意思是,你可以,但是这会破坏迭代器,它们会因异常而失败)。

答案 1 :(得分:1)

这样可以正常工作,使用多个迭代器迭代单个实例不是问题。

只要您使用SynchronizedList,就没有理由不修改列表。 SynchronizedList将阻止对列表的并发修改并使其线程安全。

我建议您使用Guava库,并使用他们的SynchronizedList数据结构,以及他们的Iterables.filterIterables.transform方法以及{{1} }和Predicates对List进行排序和转换。

更多关于番石榴图书馆的信息:

http://code.google.com/p/guava-libraries/

http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html

为清楚起见:

在迭代列表时,您必须在块中的列表上进行同步,如下所示:

Functions

答案 2 :(得分:0)

是的,你可以。只需确保在迭代期间您不修改列表。 如果你打算这样做;请同步迭代。