gpt4 book ai didi

java - 一个线程计时比其他线程快

转载 作者:行者123 更新时间:2023-12-02 06:24:21 25 4
gpt4 key购买 nike

我有一个线程每秒重复一个 Action (射击):

long lasttime;
Creature owner;
public Attacker(Creature actor)
{
super("Attacker - "+actor.getClass().getSimpleName());
lasttime=System.currentTimeMillis();
owner=actor;
owner.lockedon=true;
}
@Override
public void run() {
super.run();
while(!owner.dead && owner.lockedon)
{
List pl=TVS.getGameScreen().projectiles;
synchronized (pl)
{
//here
long curtime=System.currentTimeMillis();
if(curtime-lasttime>1000)
{
owner.attack();
lasttime=curtime;
}
}
}
}

但是当主程序线程变慢时,该线程的执行速度比主线程快,并且射击相对于主线程变得过于频繁。我该怎么办?

最佳答案

您正忙于等待,持有一个锁,这可能会消耗大量 CPU,或者锁定尝试使用同一锁的其他线程。我建议类似

while(!owner.dead && owner.lockedon) {
List pl=TVS.getGameScreen().projectiles;
long curtime=System.currentTimeMillis();
long remaining = 1000 - (curtime-lasttime);
if(remaining <= 0) {
synchronized (pl) { // only lock when needed.
owner.attack();
lasttime=curtime;
}
} else {
// when not doing something useful, give up the CPU to another thread.
Thread.sleep(remaining);
}
}

关于java - 一个线程计时比其他线程快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20702368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com