2012-10-03 88 views
1

我已經看過這裏一些現有的答案,我已經使用Future結合ExecutorService設置超時與TimeUnit方法。適當的方法來設置在Java中的方法超時

但我想設置我的服務實現內的方法的超時,這意味着調用者類正在消耗接口。

所以我想避免在我的服務實現中實現可調用,因爲我想讓這個方法在同一個線程中執行。

是否有其他方法來設置超時或模擬給定方法的超時?

+1

「超時」是什麼意思?如果您的意思是在一段時間後終止操作,則無法在單獨的線程中運行該操作。 (當然,您可以在代碼中嵌入循環中的定時器檢查,並且例如在超過時間限制時拋出異常,但這需要「嫌疑」代碼的重要「合作」。) –

+0

hi熱舔這正是我的意思,對於糟糕的問題描述抱歉。 –

回答

1

你可以看TimeLimiter,它可以採取任何類別,併產生時間限制的代理。但它仍然在內部使用線程池來等待Future(至少缺省爲SimpleTimeLimiter實現)。

我想要在同一個線程中運行方法,您必須有另一個線程在給定的超時後中斷它。而且中斷並不總是有效。因此線程池和Future是唯一的方法。

+0

hi Tomasz Nurkiewicz我不知道爲什麼我說我不希望它在單獨的線程中運行。我之所以這麼說,是因爲這段代碼已經作爲可運行對象的一部分在多個線程中執行,我的意思是不增加更多的複雜性。但只要它「看起來」像同一個線程,對我來說就夠了,因爲我正在創建順序過程(由多個線程同時運行)。 –

+0

感謝您的答案我會給它一個嘗試看起來很有前途 –