Getter Method返回两个不同的对象identityHashCodes

时间:2015-03-16 00:58:48

标签: java multithreading return objectid

帮助我们尝试调试问题的项目的朋友然后遇到了更令人费解的问题。我有一个线程通过getter方法获取某个变量的值,并每500ms打印一次identityHashCode。一切正常,直到在Game类中更改变量。然后返回的identityHashCode开始在新旧对象之间前后跳转。这是我以前从未见过的行为,希望你们有任何建议,甚至暗示发生了什么。

在此先感谢,我附上了部分源代码和控制台输出。

public GamePlayState(int sid) {
            stateID = sid;
            entityManager = StateBasedEntityManager.getInstance();
            game = new Game(this);
            //TEST CODE ONLY
            Thread t = new Thread(this);
            t.start();
    }

    /******TEST CODE ONLY******/
    public synchronized void run () {
            while (true) {
                    System.err.println(System.identityHashCode(game.getShootL()));
                    try {
                            wait(500);
                    } catch (InterruptedException e) {
                            e.printStackTrace();
                    }
            }
    }


输出
  

611581887
  611581887个
  611581887个
  611581887个
  611581887个
  611581887个
  现在值已更改
  1709366259个
  611581887个
  1709366259个
  611581887个
  1709366259个
  611581887个
  1709366259个

1 个答案:

答案 0 :(得分:0)

到目前为止我们无法找到真正的答案,但是使getter Method static返回的变量消除了问题。看起来底层的第三方引擎正在弄乱对象变量!?