我想在一段固定的时间内运行一个线程.如果它没有在那段时间内完成,我想杀死它,抛出一些异常,或以某种方式处理它.怎么做到呢?
我从这个线程 中发现的一种方法是在Thread的run()方法中使用TimerTask.
有没有更好的解决方案呢?
编辑:添加赏金,因为我需要一个更清晰的答案.下面给出的ExecutorService代码没有解决我的问题.为什么我应该在执行后睡觉()(一些代码 - 我没有处理这段代码)?如果代码完成并且sleep()被中断,那怎么可能是timeOut?
需要执行的任务不在我的控制范围内.它可以是任何一段代码.问题是这段代码可能会遇到无限循环.我不希望这种情况发生.所以,我只想在一个单独的线程中运行该任务.父线程必须等到该线程完成并且需要知道任务的状态(即它是否超时或发生了一些异常或者是否成功).如果任务进入无限循环,我的父线程会无限期地等待,这不是一个理想的情况.
有没有办法在Java中指定的时间限制后杀死子线程?编辑:此特定线程也可能在最坏的情况下被阻止(线程用于等待文件修改并阻塞直到发生此事件),所以我不确定interrupt()是否会成功?
在代码中,变量计时器将指定结束while循环的持续时间,例如60秒.
while(timer) {
//run
//terminate after 60 sec
}
Run Code Online (Sandbox Code Playgroud)