gpt4 book ai didi

java - 当有多个线程时,跳出循环的最佳方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 07:11:50 25 4
gpt4 key购买 nike

我有一个有游戏循环的方法:

boolean playing = true; 
while(playing) {}

在该循环中,大约有 10 个方法被调用。

该循环位于线程的 run() 方法中,并且一次将有大约 20 个线程运行。

线程会将彼此的playing变量更改为false。

所以:

while (playing) {
doSomething1();
doSomething2();
doSomething3();
doSomething4();
doSomething5();
etc();

}

无需添加,无处不在;

 if (playing) doSomething1(); 

 if (!playing) break;

并且在线程上不调用中断的情况下,如何在播放从 true 变为 false 时使运行结束?

我确实需要在播放更改时让循环的内容一直运行到该行,因此仅使用同步之类的东西是行不通的。

或者也许会,但我只是不知道。

最佳答案

除了你的做法之外,没有其他办法可以做到这一点。只需检查执行流程中适当时刻的播放即可。

如果您考虑一下其他任何事情都是危险的 - 只有您的线程知道何时可以安全停止,否则它可能会在修改某些内容的过程中终止并让更改完成一半。

为了避免重复代码,您可以做的一件事是:

public Interface ThreadTask {
void run();
}

ThreadTask[] tasks;

while (playing) {
for (ThreadTask tt: tasks) {
if (!playing) {
break;
}
tt.run();
}
}

一般来说,我不希望执行游戏循环花费如此长的时间,以至于每次在循环中检查是否玩多次都会成为一个问题。否则,无论如何,您都需要分解那些长时间运行的任务,以保持响应。

关于java - 当有多个线程时,跳出循环的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20545260/

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