检测方法内的无限循环

我的主类中有 2 个方法


public class pol{


    public sub() {

         //... do this

         //... do this

         //... do this

         return result

    }


     public sub2()

         // calling method sub() here

         return result

     }


}

有什么方法可以检测到我使用 sub2() 方法在 sub() 中编写了一个无限循环吗?


我们可以假设我在 sub() 中使用反射加载一个类并在那里执行它..


qq_花开花谢_0
浏览 187回答 3
3回答

Smart猫小萌

正如@John M 所说,只要它们都在同一个线程中运行sub()2,如果sub(). 但是,您可以sub()2在进入循环之前检测到它。这可以通过boolean为循环保护的每个组合分配值并查看它是否评估为false. 或者您可以truth table为循环保护中涉及的每个变量创建一个,并查看整个循环保护是否评估为false

阿波罗的战车

只要它们在单个线程上运行,就不会。如果 sub() 中存在无限循环,操作将永远不会返回到 sub2()。如果 sub2() 分出一个在 sub() 中启动循环的线程,它可能仍然不可能。这实际上可能是一个停机问题。Sub2() 可以与 sub() 所在的线程交互,并在给定时间、给定迭代次数或其他一些标准后杀死它。如果有一些您知道要检查的状态会导致无限循环 sub2() 可以查找该状态并杀死 sub() 如果它进入它但 Thread 没有 .isInInfiniteLoop() 方法。

狐的传说

如果您希望sub()在某个时间完成它的工作,除非它进入无限循环,您可以使用其中的一个Timer或一些代码sub()将当前时间与开始时间进行比较,sub()如果时间过长则停止。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java