gpt4 book ai didi

java - 防止线程子类等待

转载 作者:行者123 更新时间:2023-11-30 08:21:19 26 4
gpt4 key购买 nike

我正在为 I TA 的 Java 类(class)制作一个编码游戏。游戏是在无向图上管理卡车车队(Truck extends Thread),以尽可能少的时间/燃料将包裹运送到各个目的地。学生扩展了一个抽象管理器类,该类填补了卡车行为的空白(到达目的地后要做什么等)。卡车类的 run 方法是一个事件循环,它等待用户指令,然后在收到行驶目的地时跟随它。这是事件循环:

@Override
/** The Truck's main running routine. While the travel directions are empty,
* Waits for more instructions in WAIT_TIME intervals. While the travel directions
* are not empty, pops off the next travel direction
*/
public void run(){
while(game.isRunning()){

setGoingTo(null);

while(travel.isEmpty() && game.isRunning()){
try{
Thread.sleep(WAIT_TIME);
}
catch (InterruptedException e){
e.printStackTrace();
}

setStatus(Status.WAITING);
game.getScore().changeScore(Score.WAIT_COST);
}
while(!travel.isEmpty() && game.isRunning()){
Edge r = getTravel();
try {
travel(r);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

第一个内部 while 循环在没有要遵循的行进指令时循环。如您所见,每 WAIT_TIME 毫秒(一帧),分数就会减少等待成本——卡车空转的成本。然而,我意识到,解决此成本的潜在解决方案的一种方法是告诉卡车(线程)在没有指令时等待,然后在用户为它计算指令后通知它。我想以编程方式防止这种情况发生,而不是仅仅输入不这样做的说明。

这可能吗?也许是线程类中要覆盖的方法?是否可以阻止扩展 Thread 的类等待(在任何情况下?)如果卡车线程试图执行 .wait(),我会接受抛出任何类型的异常。

感谢阅读并感谢您就如何解决规则中的这一漏洞提出任何建议!如果您想尝试一下,该游戏很快就会出现在公共(public)仓库中。

最佳答案

对于您提出的确切问题(如何防止等待),我没有解决方案,但对于评论来说,建议有点太长了:

如何测量第一个 while 循环开始和结束之间的时间。

long starttime = System.currentTimeMillis();
setStatus(Status.WAITING);
while(travel.isEmpty() && game.isRunning()){
try{
Thread.sleep(WAIT_TIME);
}
catch (InterruptedException e){
e.printStackTrace();
}
}
long endtime = System.currentTimeMillis();
long waittime = endtime - starttime;
game.getScore().changeScore(Score.WAIT_COST * (1 + waittime / WAIT_TIME));

即使线程进入 hibernate 状态,分数也会根据耗时而变化。您将不会获得实时比赛比分更新。

关于java - 防止线程子类等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25317103/

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