JDK 5.0 新增
1.創建一個實現了 interface Callable
的類別
2.實現類去實現 Callable 的抽象方法: call()
,將此執行緒需要執行的程式寫在這裡
3.創建實現類的物件
4.將此物件作為參數傳遞到 FutureTask<T>
類的建構子(constructor)
中
5.將FutureTask<T>
物件作為參數傳遞到 Thread 類的建構子(constructor)
中並調用 start()
6.取得 Callable 中 call()
的回傳值
/**
* 1-100之間求偶數之和
* @author sunwc
* @create 2023-03-24 下午 08:46
*/
public class EvenAmount {
public static void main(String[] args) {
NumberThread numberThread = new NumberThread();
FutureTask futureTask = new FutureTask(numberThread);
new Thread(futureTask).start();
try {
// get() 即為調用call() 的回傳值
Object sum = futureTask.get();
System.out.println("偶數之和:" + sum);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
class NumberThread implements Callable {
@Override
public Object call() throws Exception {
int sum = 0;
for (int i = 1; i <= 100 ; i++) {
if (i % 2 == 0) {
sum += i;
}
}
return sum;
}
}
輸出結果:
偶數之和:2550
延伸學習:有關透過 Thread Pool 達成 Multi-threading,可以參考我的另一篇文章 Java - Thread 執行緒(四) Thread Pool