gpt4 book ai didi

java - 如何在 2 个线程的 ArrayList 中避免 NullPointerException

转载 作者:行者123 更新时间:2023-12-02 07:53:47 25 4
gpt4 key购买 nike

我正在创建 Android 游戏,但遇到了问题。我有 2 个线程:OpenGL 线程和游戏循环。我使用 ArrayLists 来存储可渲染对象,这就是问题所在。有时我需要在游戏线程中删除这些对象,有时它会导致 OpenGL 线程获得 NullPointerException,因为据我了解,它会遍历集合并突然删除一个元素。我想我应该让 OpenGL 线程删除对象,但是还有其他解决方案吗?如果游戏循环开始获取空元素怎么办?也许我可以以某种方式同步线程,尽管我仍然不明白“同步”是如何工作的。谢谢。

这会有帮助吗?我应该把它放在我用 ArrayList 做某事的地方吗?

synchronized (arrayListName) 
{
arrayListName.remove(object);
}

最佳答案

I still don't understand how "synchronized" works

这是你需要补救的事情。 Java 中的并发结构(包括同步)是基本概念。我建议选择Effective Java,第二版。

http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683

一个基本想法是,如果您有一个原子操作,其中一个线程读取列表项,然后另一个线程读取列表项,则需要使用二进制信号量锁定它 - 最简单的方法是使用Java 同步构造。

一种不太天真的方法可能是让线程 1 从列表中提取值,执行它需要执行的操作,然后将值“传递”给线程 2,例如,通过将项目添加到线程拥有的队列中2.

如果不熟悉代码,几乎不可能为您的应用程序描述“正确”的解决方案。我只是胡乱猜测。

关于java - 如何在 2 个线程的 ArrayList 中避免 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9908877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com