對(duì)于多線程,大家并不陌生,對(duì)于如何創(chuàng)建線程也是輕車熟路,對(duì)于使用new thread和實(shí)現(xiàn)runable接口的方式,不再多說(shuō)。這篇博文我們介紹第三種:實(shí)現(xiàn)Callable接口。
Callable接口
接口定義:
1
2
3
4
|
@FunctionalInterface public interface Callable<V> { V call() throws Exception; } |
從Callable的定義可以看出:
Callable接口類似于Runnable,兩者都是為那些其實(shí)例可能被另一個(gè)線程執(zhí)行的類設(shè)計(jì)的,方法可以有返回值,并且可以拋出異常。但是Runnable不行。
Callable需要依賴FutureTask,用于接收運(yùn)算結(jié)果。一個(gè)產(chǎn)生結(jié)果,一個(gè)拿到結(jié)果。FutureTask是Future接口的實(shí)現(xiàn)類,也可以用作閉鎖。
簡(jiǎn)單實(shí)例
計(jì)算0到100相加,返回結(jié)果。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public class TestCallable { public static void main(String[] args) { CallableThreadDemo ctd = new CallableThreadDemo(); //1.執(zhí)行Callable方式,需要FutureTask實(shí)現(xiàn)類的支持,用于接收運(yùn)算結(jié)果 FutureTask<Integer> result = new FutureTask<Integer>(ctd); new Thread(result).start(); //2.接收線程運(yùn)算后的結(jié)果 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; } } |
總結(jié)
Callable接口其實(shí)特別簡(jiǎn)單,在多線程環(huán)境中,返回結(jié)果。
希望本文所述對(duì)大家了解多線程及callable接口有所幫助。感謝大家對(duì)本站的支持!
原文鏈接:http://blog.csdn.net/jiuqiyuliang/article/details/62426518