多執行緒之建立執行緒的方式之一:實現Callable介面(三)
阿新 • • 發佈:2018-12-24
對於多執行緒,大家並不陌生,對於如何建立執行緒也是輕車熟路,對於使用new thread和實現runable介面的方式,不再多說。這篇博文我們介紹第三種:實現Callable介面。
Callable介面
介面定義:
@FunctionalInterface
public interface Callable<V> {
V call() throws Exception;
}
從Callable的定義可以看出:
- Callable介面類似於Runnable,兩者都是為那些其例項可能被另一個執行緒執行的類設計的,方法可以有返回值,並且可以丟擲異常。但是Runnable不行。
- 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介面其實特別簡單,在多執行緒環境中,返回結果。
下篇博文,我們研究如何解決多執行緒安全問題。