0

我有使用ExecutorService調度任務的方法。我需要在一段時間後終止任務。我怎樣才能指定這樣的時間?如何使用Java中的ExecutorService爲任務設置超時時間

編輯: 我等待的時間X量的資源可用,而不是無限期的等待之後應該終止一個進程。

+3

你有答案在這裏 - http://stackoverflow.com/questions/2758612/executorservice-that-interrupts - 超時任務 –

回答

0

停止執行行爲應該由任務本身來執行。您可以嘗試強制停止該線程,但這會導致死鎖問題。

您應該讓這些任務實現超時邏輯,以便他們可以以合適的方式關閉自己。


這裏是一個資源等待任務的一個基本的例子:

@Override 
public Object call() throws Exception { // In a Callable<Object> 
    long startTime = System.currentTimeMillis(); 
    while(System.currentTimeMillis() - startTime < 5000) { // wait for max 5 seconds. 
     if(resource.isAvailable()) { 
      // Do something with the resource 
      return someValue; 
     } 
    } 

    throw new TimeoutException("Resource could not be acquired"); 
} 
+0

謝謝,但我在這裏討論時間。 **如何在執行程序上設置時間間隔**,之後終止線程。我有一個進程應該在等待資源變得可用x時間後終止,而不是無限期地等待。 – nikk

+0

@Nikk我知道你想要什麼,但這對於執行者服務是不可能的,除非你調用'''shutdownNow()'''好了。終止一個線程,不是一個好主意。這不是一個可靠的機制。這是'Thread'''''''''''''''''方法被棄用的原因之一。您應該將終止委託給任務本身,以便它可以實現邏輯以適當的方式關閉它。 –

+0

我明白了。那麼,在Java中使用什麼技術來防止程序無意中等待資源可用? – nikk

相關問題