我有两个线程。一个线程有一个 myObjectManager 的实例。 myObjectManager 有一个对象列表,以及一个检索对象的方法(public myObjectClass getObjectById(int ID))
我需要第一个线程渲染 myObjectManagers 对象列表中的一个对象,第二个线程执行游戏逻辑并移动它等。
这是我尝试过的
//thread 1:
m = myObjectManager.getObjectById(100);
m.render();
//thread 2:
m = myObjectManager.getObjectById(100);
m.rotate( m.getRotation() + 5 ); //increment rotation value
但是,线程1似乎有一个没有更新旋转的对象实例。当我运行它时,渲染的对象没有旋转,但是当我让第二个线程打印出旋转值时,它被旋转了。
在 C++ 中,我只是让函数 getObjectById() 返回一个指向 myObjectClass 实例的指针,但我不确定当我说“return myInstance;”时 java 到底做了什么。 我如何在 Java 中做类似的事情?
抱歉,我是这门语言的新手!
最佳答案
在 Java 中,所有对象变量都是“指针”(或人们通常所说的“引用”)。问题一定出在别处。我的猜测是线程 1 甚至在线程 2 修改它之前就已经渲染了该对象。
编辑:另一种理论:后续的 render() 操作实际上并不改变屏幕显示。旋转值更新得很好 - 但它不会反射(reflect)到显示器上。
关于java - 具有多个线程的Java中的对象指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4717525/