嵌套循环和超时

时间:2013-02-06 15:00:41

标签: java multithreading

我有一个大的嵌套循环(深达6层),可生成决策树。然而,这是一个相当时间关键的程序,我需要在时间结束时中止这一代。

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

或者我应该将嵌套循环切割成嵌套线程?

3 个答案:

答案 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();
}

此代码仅用于插图,根据需要进行更改。