3
這是用我未來的代碼片斷未來的任務完成後,沒有放棄。Java進程
import java.util.concurrent.*;
import java.util.*;
public class FutureDemo{
public FutureDemo(){
/* Future */
ExecutorService service = Executors.newFixedThreadPool(2);
for (int i=0; i<10; i++){
MyCallable myCallable = new MyCallable((long)i);
Future<Long> futureResult = service.submit(myCallable);
Long result = null;
try{
result = futureResult.get(5000, TimeUnit.MILLISECONDS);
}catch(TimeoutException e){
System.out.println("Time out after 5 seconds");
futureResult.cancel(true);
}catch(InterruptedException ie){
System.out.println("Error: Interrupted");
}catch(ExecutionException ee){
System.out.println("Error: Execution interrupted");
}
System.out.println("Result:"+result);
}
}
public static void main(String args[]){
FutureDemo fc = new FutureDemo();
}
class MyCallable implements Callable{
Long id = 0L;
public MyCallable(Long val){
this.id = val;
}
public Long call(){
return id;
}
}
}
輸出:
D:\Study\Java>java FutureDemo
Result:0
Result:1
Result:2
Result:3
Result:4
Result:5
Result:6
Result:7
Result:8
Result:9
-
提交所有今後的任務後,我得到的結果,但仍計劃沒有退出。我的光標閃爍,直到我點擊CTRL + C java程序沒有退出。什麼是問題?
編輯:我不能關閉執行程序服務,除非在服務器關閉時觸發關閉掛鉤。
這將執行可調串行:因爲你在循環中調用'get',它會等待,直到結果準備好(或超時或異常),然後提交下一個可調用對象。 –
但我得到了所有在問題中編輯的結果。 –
當然,但它們是按順序排列和執行的。嘗試把在可調用睡眠,使得0將是低於1(比如,4秒如果val == 0睡眠)。你會看到0將在1之前完成。 –