我有一个大的嵌套循环(深达6层),可生成决策树。然而,这是一个相当时间关键的程序,我需要在时间结束时中止这一代。
我知道每个循环都可以使用计时器进行检查,但会降低效率。我正在考虑使用监视器线程或类似的机制,我想知道是否有一种有效的方法来设置整个循环和中断的超时(可能使用“goto”子句)?
或者我应该将嵌套循环切割成嵌套线程?
答案 0 :(得分:2)
如何检查System.currentTimeMillis()
时钟值是否效率低?我强烈怀疑它可以忽略不计,这可能是你最简单,最有效的选择。
答案 1 :(得分:1)
您可以测试检查最内层循环的计时器,如果速度太慢,请将其移至Level 5
,如果速度过慢,则Level 4
...
答案 2 :(得分:0)
如果要在完成一定时间限制的情况下停止整个生成过程,可以将所有循环放在一个线程中,并允许线程运行特定时间,如果没有完成则终止。我将如何做到这一点:
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();
}
此代码仅用于插图,根据需要进行更改。