为了账号安全,请及时绑定邮箱和手机立即绑定

检测方法内的无限循环

检测方法内的无限循环

qq_花开花谢_0 2021-11-11 18:07:31
我的主类中有 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


查看完整回答
反对 回复 2021-11-11
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

只要它们在单个线程上运行,就不会。如果 sub() 中存在无限循环,操作将永远不会返回到 sub2()。

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


查看完整回答
反对 回复 2021-11-11
?
狐的传说

TA贡献1804条经验 获得超3个赞

如果您希望sub()在某个时间完成它的工作,除非它进入无限循环,您可以使用其中的一个Timer或一些代码sub()将当前时间与开始时间进行比较,sub()如果时间过长则停止。


查看完整回答
反对 回复 2021-11-11
  • 3 回答
  • 0 关注
  • 178 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信