【问题标题】:Thread help with Android game线程帮助与 Android 游戏
【发布时间】:2010-03-13 21:22:58
【问题描述】:

我需要一些帮助来处理 Android 中的三个线程

一个线程是主线程,一个是GLThread,另一个是我创建的用于更新游戏状态的WorkerThread。

我遇到的问题是他们都需要访问相同的游戏对象 LinkedList。 GLThread 和我的 WorkerThread 都只从 LinkedList 读取,所以那里没有问题,但偶尔我有主线程将另一个游戏对象添加到列表中。

我该如何管理?我尝试在所涉及的函数前面使用同步,但它确实减慢了应用程序的速度。

由于某种原因,只是捕获错误而不渲染或更新该帧的游戏状态,导致它开始永久滞后。

有人有什么好主意吗?

【问题讨论】:

    标签: java android multithreading thread-safety


    【解决方案1】:

    我建议使用 CopyOnWriteArrayList。这会在备份列表发生变异时复制它,但允许不同步的读取与您从即时读取列表相对于写入的权衡。

    【讨论】:

      【解决方案2】:

      有多种方法可以做到这一点:如果您的列表不是太大,那么您可以对作为原子操作的列表进行 CAS(比较和设置)。这要求您创建列表的副本,添加需要添加的项目,然后 CAS 不锁定。如果添加只是偶尔发生,那么它不会是一个显着的开销。 CAS 是来自 Java 的 atomic libraryAtomicReference 上的一种方法...正如 Software Monkey 所说,同样的事情可以通过 CopyOnWriteArrayList 来实现。

      或者,您也可以查看 Java 的 concurrency library 中的各种容器,或者如果您想要一个无锁集合,请使用 ConcurrentHashMap

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多