我有一个生成决策树的大型嵌套循环(深达 6 层)。但是,这是一个相当时间紧迫的程序,我需要在时间到时中止生成。
我知道每个循环都可以检查计时器,但会降低效率。我正在考虑使用监视线程或类似机制,我想知道是否有一种有效的方法可以为整个循环和中断设置超时(可能使用“goto”子句)?
还是我应该将嵌套循环切割成嵌套线程?
我有一个生成决策树的大型嵌套循环(深达 6 层)。但是,这是一个相当时间紧迫的程序,我需要在时间到时中止生成。
我知道每个循环都可以检查计时器,但会降低效率。我正在考虑使用监视线程或类似机制,我想知道是否有一种有效的方法可以为整个循环和中断设置超时(可能使用“goto”子句)?
还是我应该将嵌套循环切割成嵌套线程?
检查时钟值的效率有多低?System.currentTimeMillis()
我强烈怀疑它可以忽略不计,这很可能是您最简单和最有效的选择。
您可以测试检查最内层循环上的计时器,如果太慢,请将其移至您的Level 5
,如果太慢,您的Level 4
...
如果你想停止整个生成过程,如果它没有在一定的时间限制内完成,你可以把所有的循环放在一个线程中,让线程运行特定的时间,如果它没有完成则终止。这是我将如何做到这一点:
Thread generationThread = new Thread(){
public void run(){
// All your loops
// You can check for isInterrupted and simply return to terminate the process
if(isInterrupted()){
return;
}
}
}
generationThread.start();
generationThread.join(MAX_TIME); // how long in ms this process is allowed to run
// Terminate the thread if it did not finish
if(generationThread.isAlive()){
generationThread.interrupt();
}
此代码仅供说明,请根据需要更改。