【问题标题】:How to make a variable global in java如何在java中使变量成为全局变量
【发布时间】:2012-11-12 12:33:36
【问题描述】:

在多人在线游戏中。如何保持变量全局?我们正在开发一个在线游戏,我们需要一个全局变量。将有一个服务器和多个客户端。我们如何保持一个公共变量是静态的,并且所有客户端都可以同步编辑。我们有什么建议吗?

【问题讨论】:

  • 你听说过 public static 吗?
  • @aaronps 你读完了所有问题吗?
  • 似乎我没有阅读整个问题。
  • @Vash 谢谢,现在我阅读了所有问题,现在有了答案。
  • Global variables in Java 的可能重复项

标签: java client-server global-variables multiplayer static-variables


【解决方案1】:

如果您曾经迁移到集群,拥有基于堆的变量将成为一个问题,因为它不够全局(每个节点都有一个单独的副本)。

如果这不是问题,并且如果您所说的“变量”是指简单的东西,如字符串或长整型,那么最好的选择是使用 java.util.concurrent.Atomic* 类。例如,

public static final AtomicLong id = new AtomicLong();

这样做最重要的优点是它可以使用 compare-and-swap 和 get-and-set 进行原子更新,例如id.getAndIncrement();

【讨论】:

    【解决方案2】:

    服务器必须控制变量。

    当客户端想要修改那个变量时,他们不会改变它,他们必须向服务器发送一条消息,告诉服务器新的想要的值。服务器存储它并向所有客户端广播一条消息,然后它们都使用新值更新该变量。

    当然,如果服务器自己修改,它只是广播新的值。

    【讨论】:

      【解决方案3】:

      - public static final 用于在 Java 中使变量为全局变量。

      -但是接下来必须使用volatile,这样操作直接发生在内存中,直接从内存中读取。

      - 最好使用来自java.util.concurrent.Atomic 的类。

      -你可以使用AtomicIntegerAtomicLongAtomicReference等......

      【讨论】:

        猜你喜欢
        • 2023-01-05
        • 1970-01-01
        • 1970-01-01
        • 2021-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多