我的主类中有 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() 中使用反射加载一个类并在那里执行它..
3 回答
Smart猫小萌
TA贡献1911条经验 获得超7个赞
正如@John M 所说,只要它们都在同一个线程中运行sub()2
,如果sub()
. 但是,您可以sub()2
在进入循环之前检测到它。这可以通过boolean
为循环保护的每个组合分配值并查看它是否评估为false
. 或者您可以truth table
为循环保护中涉及的每个变量创建一个,并查看整个循环保护是否评估为false
阿波罗的战车
TA贡献1862条经验 获得超6个赞
只要它们在单个线程上运行,就不会。如果 sub() 中存在无限循环,操作将永远不会返回到 sub2()。
如果 sub2() 分出一个在 sub() 中启动循环的线程,它可能仍然不可能。这实际上可能是一个停机问题。Sub2() 可以与 sub() 所在的线程交互,并在给定时间、给定迭代次数或其他一些标准后杀死它。如果有一些您知道要检查的状态会导致无限循环 sub2() 可以查找该状态并杀死 sub() 如果它进入它但 Thread 没有 .isInInfiniteLoop() 方法。
狐的传说
TA贡献1804条经验 获得超3个赞
如果您希望sub()
在某个时间完成它的工作,除非它进入无限循环,您可以使用其中的一个Timer
或一些代码sub()
将当前时间与开始时间进行比较,sub()
如果时间过长则停止。
添加回答
举报
0/150
提交
取消