如何超时线程

如何超时线程

我想运行一个线程的固定时间。如果它没有在这段时间内完成,我想要么杀死它,抛出一些异常,要么以某种方式处理它。怎么做呢?

一种方法,就像我从这条线是在Thread的run()方法中使用TimerTask。

有什么更好的解决办法吗?

 
编辑:增加赏金,因为我需要一个更清晰的答案。下面给出的ExecutorService代码没有解决我的问题。为什么我要在执行(一些代码-我没有处理这段代码)之后睡觉()?如果代码已经完成,睡眠()被中断,那怎么可能是超时呢?

需要执行的任务不在我的控制范围内。它可以是任何代码。问题是这段代码可能会遇到无限循环。我不希望这种事发生。所以,我只想在一个单独的线程中运行这个任务。父线程必须等待该线程完成,并需要知道任务的状态(即是否超时、是否发生异常或是否成功)。如果任务进入无限循环,我的父线程将无限期地等待,这不是理想的情况。


月关宝盒
浏览 575回答 3
3回答

幕布斯6054654

对于任何老任务来说,没有一种百分之百可靠的方法可以做到这一点。任务的编写必须考虑到这一能力。核心Java库,如ExecutorService取消异步任务interrupt()调用工作线程。因此,例如,如果任务包含某种循环,则应该检查其中断状态每次迭代。如果任务正在执行I/O操作,它们也应该是可中断的-而设置这些操作可能很棘手。无论如何,请记住,代码必须主动检查中断;设置中断并不一定会做任何事情。当然,如果您的任务是一些简单的循环,您只需在每次迭代时检查当前时间,并在经过指定的超时放弃。在这种情况下,不需要工作线程。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java