gpt4 book ai didi

java - 只有一个线程写入时的线程安全

转载 作者:行者123 更新时间:2023-11-30 04:19:21 26 4
gpt4 key购买 nike

我知道如果两个线程正在写入同一位置,我需要确保它们以安全的方式执行并且不会造成任何问题,但如果只有一个线程读取并完成所有写入,而另一个线程只是读取,该怎么办?

就我而言,我第一次在小游戏中使用线程来将更新与渲染分开。完成所有渲染的类永远不会写入它读取的任何内容,因此我不再确定是否需要处理它们共享的所有内容的每次读取和写入。

我将采取正确的步骤来确保渲染器不会尝试读取不再存在的任何内容,但是当调用诸如玩家和实体的 setter/getter 之类的东西时,我应该以同样的方式对待它们吗?或者将 x、y 线等值和“alive”等 boolean 值设置为 volatile 可以解决问题吗?

我对此的理解变得非常模糊,需要一些启发

编辑:共享数据将是需要绘制、移动并存储在对象列表中的任何数据。例如玩家和其他实体的;

最佳答案

根据给定的信息,不可能准确地指定解决方案,但很明显,您需要某种方法来在线程之间进行同步。问题是,只要写入操作不是原子的,您就可以在更新数据时读取数据。这意味着您会得到一个旧的 y 坐标和一个新的 x 坐标。

基本上,如果两个线程仅读取信息,或者更好的是,如果所有数据结构都是不可变的(因此两个线程不能 修改对象)。最好的方法是首先考虑哪些操作需要原子化,然后创建一个解决方案以使操作原子化。

不要忘记:让它发挥作用,让它正确,让它优化(按顺序)。

关于java - 只有一个线程写入时的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17503056/

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