我正在使用SOOT框架进行一些静态分析。但是,有时分析需要几个小时,我想设置一个超时来停止分析并继续使用另一个程序。
为了实现这种行为,我在一个帖子中运行分析:
thread = new Thread(new Runnable() { run(){ buildCallgraph(); } )};
!! buildCallgraph()方法由SOOT提供,我没有机会 改变它。 !!
目前我不知道如何停止该线程。中断将无法工作,因为buildCallgraph()永远不会检查它的线程是否被中断。不应使用Thread.stop()。
那么,有没有人知道如何终止线程?
此致 罗伯特
答案 0 :(得分:1)
有充分的理由不使用Thread.stop()
,那么如何使用不同的方法:尝试将其作为单独的程序运行,而不是在单独的线程中运行分析。
这意味着一个小的性能损失,但实际上,任务创建和序列化/反序列化结果不应该与当前时间的比例相比具有可测量的效果。
与Thread.stop()
不同,杀死程序会导致jvm退出后退出。
这样做的缺点是你的后续问题的答案(“如何从java程序中启动任务”,“我如何等待另一个程序的完成”,以及“我如何以编程方式杀死另一个程序“)都是特定于操作系统的。
好处是他们已经回答:
答案 1 :(得分:0)
如何保持线程开始时的时间戳?
将主题命名为“I love BOOT framweork”。然后,在Timer
中,检查Thread
是否仍在运行。
如果在Timer
中,您发现所花费的时间超过了时间量,请停止该线程。
答案 2 :(得分:0)
使用Java,您无法真正终止线程。我总是使用unix“timeout”命令在我进行此类测量后的某个时间帧后关闭Soot。显然,如果没有以优雅的方式完成运行,这实际上会杀死Soot。