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

如何超时线程

如何超时线程

月关宝盒 2019-06-18 14:46:36
如何超时线程我想运行一个线程的固定时间。如果它没有在这段时间内完成,我想要么杀死它,抛出一些异常,要么以某种方式处理它。怎么做呢?一种方法,就像我从这条线是在Thread的run()方法中使用TimerTask。有什么更好的解决办法吗? 编辑:增加赏金,因为我需要一个更清晰的答案。下面给出的ExecutorService代码没有解决我的问题。为什么我要在执行(一些代码-我没有处理这段代码)之后睡觉()?如果代码已经完成,睡眠()被中断,那怎么可能是超时呢?需要执行的任务不在我的控制范围内。它可以是任何代码。问题是这段代码可能会遇到无限循环。我不希望这种事发生。所以,我只想在一个单独的线程中运行这个任务。父线程必须等待该线程完成,并需要知道任务的状态(即是否超时、是否发生异常或是否成功)。如果任务进入无限循环,我的父线程将无限期地等待,这不是理想的情况。
查看完整描述

3 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

对于任何老任务来说,没有一种百分之百可靠的方法可以做到这一点。任务的编写必须考虑到这一能力。

核心Java库,如ExecutorService取消异步任务interrupt()调用工作线程。因此,例如,如果任务包含某种循环,则应该检查其中断状态每次迭代。如果任务正在执行I/O操作,它们也应该是可中断的-而设置这些操作可能很棘手。无论如何,请记住,代码必须主动检查中断;设置中断并不一定会做任何事情。

当然,如果您的任务是一些简单的循环,您只需在每次迭代时检查当前时间,并在经过指定的超时放弃。在这种情况下,不需要工作线程。


查看完整回答
反对 回复 2019-06-18
  • 3 回答
  • 0 关注
  • 574 浏览

添加回答

举报

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