[英]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.