我正在制作一个2人的视频游戏,并且对手的位置在线程上得到更新,因为它有一个持续监听的套接字。我要分享的是位置和轮换。
由于它是一个视频游戏,我不希望主线程被阻止(或者只是最短的时间),我不希望性能受到影响。因此,从我所看到的分享这些信息,正常的事情将是像
class sharedinfo
{
public synchronized read();
public synchronized write();
}
但是这会阻止主线程中的读取(绘制视频游戏的相同)直到写入三个值(或者将来写入更多信息),并且我还读到同步非常昂贵(同样重要的是,这个游戏也适用于Android,因此性能非常重要)。
但是我想可能在AtomicReference中使用sharedInfo并消除synchronized会使它更有效率,因为它只会在引用本身被更新时停止(写入不存在,我会创建一个新对象并放置它在原子参考上),他们也说原子*使用硬件操作并且比同步更有效。
您怎么看?
答案 0 :(得分:1)
考虑为此使用队列,Java有一些很好的并发队列实现。在java.util.concurrent中查找BlockingQueue接口,以及实现它的人。你有机会填写你甚至没有考虑过的实施策略。
在你知道它之前,你需要传达的不仅仅是你的线程之间的位置,而是一个队列你可以在那里粘贴不同类型的对象,可能有不同的优先级等等。
如果你的代码中尽可能多地使用接口(比如Queue或BlockingQueue)(即除了构造特定实例的地方之外的任何地方),很容易换出你正在使用的确切类型的Queue,如果您需要不同的功能,或者只是想玩游戏。