簡體   English   中英

當Future.get(超時)超時時,線程是否繼續運行

[英]Does the thread continue running when Future.get(timeout) timeouts

正如標題所示,如果Future.get(超時)超時,線程是否繼續運行,

ExecutorService executor = Executors.newFixedThreadPool(n);
Callable<Object> task = new Callable<Object>() {
  public Object call() {
       //...
 }
}
Future<Object> future = executor.submit(task);
try {
  Object result = future.get(5, TimeUnit.SECONDS); 
} catch (TimeoutException ex) {
  // handle the timeout
}

如果線程繼續運行並因某些IO等而被阻塞,那么當線程池加滿時,不能對新任務進行求和,這意味着trheadpool會被卡住,因為池中的所有線程都被阻塞了,對吧?

對future.get(..)的調用將阻止運行它的線程最多5秒。 線程池執行的任務將不受影響,並將繼續運行,直到正常終止/異常/中斷。

關於線程池滿負荷時提交新任務,在您的情況下,將提交任務(立即釋放提交者線程),但是將在線程池隊列中等待執行。 Executors.newFixedThreadPool(..)API文檔清楚地指明了這一點。

是的,在IO拋出異常或結束之前,底層線程將一直存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM