2010-12-14 23 views
1

在我的可調用代碼中,我使用信號通知將多個結束行爲通知給另一個線程。 Callable對象在Executor中與FutureTasks排隊。他們在排隊後也可能被取消。需要在取消之前啓動FutureTask

現在,我的問題是我依賴於至少爲我的信令工作而啓動的任務,但看起來Executor只是在任務被標記爲取消之前跳過任務,然後纔有機會運行它。

那麼,有沒有一種方法可以保證任務總是被啓動,並且在運行時總是被取消(通過InterruptedException)。

另外,你可以檢查任務是否還沒有開始但失敗?

+0

我懷疑答案是一個簡單的「否」 – skaffman 2010-12-14 12:46:25

回答

2

您可能繼承FutureTask類並覆蓋它的done()方法來執行信號傳遞。根據文檔,即使任務已被取消,也應該調用此方法。

+0

該解決方案效果很好!我添加了一個變量hasStarted來跟蹤Callable.run()是否被調用,並且在FutureTask.done()中添加了一些信號,如果hasStarted爲false,則觸發該信號。 – hishadow 2010-12-14 13:14:19

相關問題