Java執行緒--執行緒池Future、Callable
阿新 • • 發佈:2018-12-20
Future、Callable配套使用
Runnable與Callable區別:
- Runnable介面:
一個獨立的任務,任務執行的結果,無需告知主執行緒
Runnable介面中的方法為:void run(){}
- Callable介面:
也是一個獨立的任務,但是任務執行的結果,是主執行緒想要知曉的,因此可以配套Future介面,在將來的某個時間點,主執行緒可以獲取到獨立任務的執行結果,以便主執行緒拿來消費使用這個任務的執行成果
Callable介面中的方法為:T call(){}
示例程式碼:
/** * 演示Future、Callable用法 */ import java.util.concurrent.*; import java.util.concurrent.locks.*; import java.util.concurrent.atomic.*; public class FutureTest{ public static void main(String[] args){ ExecutorService es = Executors.newFixedThreadPool(2); Future<Integer> f1 = es.submit(new MyTask()); try{ System.out.println("主執行緒痴痴的等子執行緒的運算結果!"); Integer sum = f1.get(); System.out.println("sum is :"+sum); }catch(Exception ee){} es.shutdown(); System.out.println("main is over...."); } } class MyTask implements Callable<Integer> { public Integer call(){ int sum = 0; for(int i=0;i<5000;i++){ sum+=i; } try{ Thread.sleep(2000); System.out.println("子執行緒運算完畢!"); }catch(Exception ee){} return sum; } }
程式執行結果如下:
主執行緒痴痴的等子執行緒的運算結果!
子執行緒運算完畢!
sum is :12497500
main is over....