0

我有一个生成决策树的大型嵌套循环(深达 6 层)。但是,这是一个相当时间紧迫的程序,我需要在时间到时中止生成。

我知道每个循环都可以检查计时器,但会降低效率。我正在考虑使用监视线程或类似机制,我想知道是否有一种有效的方法可以为整个循环和中断设置超时(可能使用“goto”子句)?

还是我应该将嵌套循环切割成嵌套线程?

4

3 回答 3

2

检查时钟值的效率有多低?System.currentTimeMillis()我强烈怀疑它可以忽略不计,这很可能是您最简单和最有效的选择。

于 2013-02-06T15:02:39.760 回答
1

您可以测试检查最内层循环上的计时器,如果太慢,请将其移至您的Level 5,如果太慢,您的Level 4...

于 2013-02-06T15:04:22.897 回答
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();
}

此代码仅供说明,请根据需要更改。

于 2013-02-06T15:18:38.330 回答