3

我正在制作一个 2 人视频游戏,并且对手的位置在线程上得到更新,因为它有一个持续监听的套接字。我想分享的是位置和旋转。

因为它是一个视频游戏,我不希望主线程被阻塞(或者只是可能的最短时间),我不希望性能受到影响。因此,从我所看到的分享这些信息来看,正常的做法是

class sharedinfo
{
   public synchronized read();
   public synchronized write();
}

但这会阻塞主线程中的读取(与绘制视频游戏相同),直到写入三个值(或者将来写入更多信息),而且我读过同步非常昂贵(也是重要的是要说这个游戏也适用于android,所以性能非常重要)。

但我在想,也许在 AtomicReference 中包含 sharedInfo 并消除 synchronized 会使其更有效,因为它只会在引用本身被更新时停止(写入不存在,我会创建一个新对象并将其放在atomicreference),他们还说 atomic* 使用硬件操作并且比同步更有效。

你怎么看?

4

1 回答 1

1

考虑为此使用队列,Java 有一些不错的并发队列实现。在 java.util.concurrent 中查找 BlockingQueue 接口,以及谁实现了它。您可能会发现您甚至没有考虑过的实施策略。

在不知不觉中,您需要的不仅仅是线程之间的位置通信,而且通过队列,您可以将不同类型的对象放入其中,可能具有不同的优先级等。

如果在您的代码中尽可能多地使用接口(如 Queue 或 BlockingQueue)(即除了构造特定实例的地方之外的任何地方),如果您需要,更换您正在使用的确切类型的队列真的很容易不同的功能,或者只是想玩。

于 2012-11-17T06:18:08.483 回答