使用旧框架向类添加超时行为

时间:2013-10-21 17:44:15

标签: java multithreading soot

我正在使用SOOT框架进行一些静态分析。但是,有时分析需要几个小时,我想设置一个超时来停止分析并继续使用另一个程序。

为了实现这种行为,我在一个帖子中运行分析:

thread = new Thread(new Runnable() { run(){ buildCallgraph(); } )};
  

!! buildCallgraph()方法由SOOT提供,我没有机会   改变它。 !!

目前我不知道如何停止该线程。中断将无法工作,因为buildCallgraph()永远不会检查它的线程是否被中断。不应使用Thread.stop()。

那么,有没有人知道如何终止线程?

此致 罗伯特

3 个答案:

答案 0 :(得分:1)

有充分的理由不使用Thread.stop(),那么如何使用不同的方法:尝试将其作为单独的程序运行,而不是在单独的线程中运行分析。

这意味着一个小的性能损失,但实际上,任务创建和序列化/反序列化结果不应该与当前时间的比例相比具有可测量的效果。

Thread.stop()不同,杀死程序会导致jvm退出后退出。

这样做的缺点是你的后续问题的答案(“如何从java程序中启动任务”,“我如何等待另一个程序的完成”,以及“我如何以编程方式杀死另一个程序“)都是特定于操作系统的。

好处是他们已经回答:

  1. How to start an external program inside a java program
  2. Java: wait for exec process till it exits
  3. Java tool/method to force-kill a child process

答案 1 :(得分:0)

如何保持线程开始时的时间戳? 将主题命名为“I love BOOT framweork”。然后,在Timer中,检查Thread是否仍在运行。

如果在Timer中,您发现所花费的时间超过了时间量,请停止该线程。

答案 2 :(得分:0)

使用Java,您无法真正终止线程。我总是使用unix“timeout”命令在我进行此类测量后的某个时间帧后关闭Soot。显然,如果没有以优雅的方式完成运行,这实际上会杀死Soot。