我的問題的一般情況是,我們如何檢測一個特定的函數調用是否花了太長時間,以致於我們想要終止它?如何限制線程的執行時間並在運行時間過長時終止它?
在我的頭頂,我認爲使用一個線程來運行該功能,並殺死線程,如果它運行太長的定義如下:
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