我的问题的一般情况是,我们如何检测一个特定的函数调用是否花了太长时间,以致于我们想要终止它?如何限制线程的执行时间并在运行时间过长时终止它?
在我的头顶,我认为使用一个线程来运行该功能,并杀死线程,如果它运行太长的定义如下:
class MyThread extends Thread
{
public void run()
{
someFunction();
}
}
并说someFunction可能是:
public void someFunction()
{
// Unknown code that could take arbitrarily long time.
}
在上面的代码中,someFunction()
可能没有时间完成,或者需要花费很长时间,所以说我想在耗时过长时停止它。
然而,在Java线程的实现,显然我不能使用共享变量或时间戳的线程中,这样的线程将有时间观念,因为someFunction()
玩意儿原子和这样的检查对时间戳码只能在someFunction
之后去,因此在编码被执行的时候变得没用,一些功能已经完成了。
请注意,我也想这样做,someFunction()
是不可知的。也就是说,someFunction()
不应该 担心它运行多少时间。它根本不应该意识到它。
任何人都可以提供一些见解我如何完成此功能?
你说的是死锁吗?我不指望人们像上面那样编码。给我们确切的场景。 – SMA 2014-12-06 07:04:06
@almasshaikh没有关于锁。我只是问,如果我想确保一条线不会运行太久,否则我们会杀死它,我们应该怎么做? – OneZero 2014-12-06 07:05:11
使用另一个计划的线程,该线程在您的线程以线程引用启动后运行,并在一小时后唤醒,如果它仍然运行中断它(只要您的线程响应中断)。 – SMA 2014-12-06 07:07:38