我有一个奇怪的问题,在这里我想使这是使用一个线程来实现蜱更新系统的程序,使用下面的代码:爪哇 - 线程停止没有任何迹象
@Override
public void run(){
long lastTime = System.nanoTime();
long deltaTime;
float passedTime = 0;
long ticks = 0;
while(true){
long currentTime = System.nanoTime();
deltaTime = currentTime - lastTime;
lastTime = currentTime;
passedTime += deltaTime/tickTime;
if(passedTime * 20 > ticks){
ticks++;
tick();
System.out.println(ticks);
}
}
}
这工作正常,除了事实上,在161滴答完成后,它停止运行,它不会抛出任何东西,没有例外,没有错误,没有任何东西。 然而只要我做到以下几点:
@Override
public void run(){
long lastTime = System.nanoTime();
long deltaTime;
float passedTime = 0;
long ticks = 0;
long useless = 0;
while(true){
long currentTime = System.nanoTime();
deltaTime = currentTime - lastTime;
lastTime = currentTime;
//Don't focus on this bit, I know it's a bit odd.
passedTime += deltaTime/tickTime;
if(passedTime * 20 > ticks){
ticks++;
tick();
System.out.println(ticks);
}
useless++;
System.out.print(useless);
}
}
,现在突然就没有问题运行?
有没有人有任何想法这可能是由于?提前致谢!
你的方法'tick()'是什么? – SubOptimal
在第一次迭代161次后,JVM已经优化了循环的执行,直到'deltaTime
fabian
@SubOptimal it调用该程序的所有更新方法,目前onlu调用一种方法来计算某些对象之间的引力吸引力。 – SchoolJava101