我有點困惑Future.get(timeout)如何按照它在定義的超時時間後通過異常的定義工作,但是它並沒有在我的測試用例中發生。未來的get()方法如何與超時一起工作
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
public class CallableExample {
public static class WordLengthCallable implements Callable<String> {
private String word;
private long waiting;
public WordLengthCallable(String word, long waiting) {
this.word = word;
this.waiting = waiting;
}
public String call() throws InterruptedException {
Thread.sleep(waiting);
return word;
}
}
public static void main(String args[]) throws Exception {
args = new String[] { "i", "am", "in", "love" };
long[] waitArr = new long[] { 3000, 3440, 2500, 3000 };
ExecutorService pool = Executors.newFixedThreadPool(3);
Set<Future<String>> set = new LinkedHashSet<Future<String>>();
int i = 0;
for (String word : args) {
Callable<String> callable = new WordLengthCallable(word, waitArr[i++]);
Future<String> future = pool.submit(callable);
set.add(future);
}
String sum = "";
for (Future<String> future : set) {
try {
sum += future.get(2000, TimeUnit.MILLISECONDS) + ", ";
} catch (Exception e) {
}
}
System.out.print("Result : " + sum);
}
}
輸出 「上午,在」
它表現不同上改變陣列(timeArr值)的等待時間。何時使用獲取超時?
你是對的,謝謝你的時間:) – RQube
歡迎您! – Harmlezz
執行與您的描述非常相似,但爲什麼最後一個任務有3000毫秒的等待時間拋出異常,請證明。 – RQube