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

多執行緒之建立執行緒的方式之一:實現Callable介面(三)

對於多執行緒,大家並不陌生,對於如何建立執行緒也是輕車熟路,對於使用new thread和實現runable介面的方式,不再多說。這篇博文我們介紹第三種:實現Callable介面。

Callable介面

介面定義:

@FunctionalInterface
public interface Callable<V> {
    V call() throws Exception;
}

從Callable的定義可以看出:

  1. Callable介面類似於Runnable,兩者都是為那些其例項可能被另一個執行緒執行的類設計的,方法可以有返回值,並且可以丟擲異常。但是Runnable不行。
  2. Callable需要依賴FutureTask,用於接收運算結果。一個產生結果,一個拿到結果。FutureTask是Future介面的實現類,也可以用作閉鎖。

簡單例項

計算0到100相加,返回結果。

public class TestCallable {

    public static void main(String[] args) {

        CallableThreadDemo ctd = new CallableThreadDemo();

        //1.執行Callable方式,需要FutureTask實現類的支援,用於接收運算結果
        FutureTask<Integer> result = new
FutureTask<Integer>(ctd); new Thread(result).start(); //2.接收執行緒運算後的結果 try { Integer sum = result.get(); //FutureTask 可用於閉鎖 System.out.println(sum); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } } class
CallableThreadDemo implements Callable<Integer>{
@Override public Integer call() throws Exception { int sum = 0; for (int i = 0; i <= 100; i++) { sum += i; } return sum; } }

總結

Callable介面其實特別簡單,在多執行緒環境中,返回結果。

下篇博文,我們研究如何解決多執行緒安全問題。