1. 程式人生 > >多執行緒建立方式三之實現Callable介面

多執行緒建立方式三之實現Callable介面

Callable 介面

  Java 5.0 在java.util.concurrent 提供了一個新的建立執行執行緒的方式:Callable 介面
  Callable 介面類似於Runnable,兩者都是為那些其例項可能被另一個執行緒執行的類設計的。但是Runnable 不會返回結果,並且無法丟擲經過檢查的異常。
  Callable 需要依賴FutureTask ,FutureTask 也可以用作閉鎖。

示例程式碼如下:

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public
class TestCallable { public static void main(String[] args) { Callable<Integer>callable = new MyCallable(); FutureTask<Integer>task[] = new FutureTask[10]; long start = System.currentTimeMillis(); for(int i=0;i<10;i++){ task[i] = new FutureTask<Integer>(callable); new
Thread(task[i]).start(); } int num = 0; while(num<10){ try { System.out.println(task[num].get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } num++; } long
end = System.currentTimeMillis(); System.out.println(end-start); } } class MyCallable implements Callable<Integer> { @Override public Integer call() throws Exception { int sum = 0; for (int i = 0; i < Integer.MAX_VALUE; i++) { sum += i; } return sum; } }

程式碼分析:
  main執行緒裡,有三個執行緒,三個執行緒獨立,task.get()只有等待對應執行緒完成後才會執行,兩個for迴圈序列,第二個for迴圈相當於閉鎖。所以最後可以打印出10個結果。而且,效率明顯比序列執行10次迴圈效率高。

流程圖分析:
這裡寫圖片描述