1 package com.atfu.java02;
2
3 import java.util.concurrent.Callable;
4 import java.util.concurrent.ExecutionException;
5 import java.util.concurrent.FutureTask;
6
7 /**
8 * 建立線程的方式三:實作Callable接口。----JDK5.0新增
9 *
10 * 如何了解實作Callable接口的方式建立多線程比實作Runable接口建立方式強大?
11 * 1.call()可以有傳回值
12 * 2.call()可以抛出異常
13 * 3.callable是支援泛型的
14 *
15 * @author fu jingchao
16 * @creat 2021/10/28-12:59
17 */
18 //1.建立一個實作callable的實作類
19 class NumThread implements Callable{
20 //2.實作call(),将此線程需要執行的操作聲明在call()中,
21 @Override
22 public Object call() throws Exception {
23 int sum = 0;
24 for (int i = 1; i <= 100; i++) {
25 if (i % 2 ==0){
26 System.out.println(i);
27 sum += i;
28 }
29 }
30 return sum;
31 }
32 }
33
34
35 public class ThreadNew {
36 public static void main(String[] args) {
37 //3.建立callable接口實作類的對象
38 NumThread nt = new NumThread();
39 //4.将此callable接口實作類的對象作為參數傳遞到FutureTask的構造器中,建立FutureTask的對象
40 FutureTask futureTask = new FutureTask(nt);
41 //5.将FutureTask的對象作為參數傳遞到Thread的構造器中,建立Thread對象,并調用start()
42 new Thread(futureTask).start();
43
44 try {
45 //6.擷取callable中的call()的傳回值
46 //get()傳回值即為FutureTask構造器參數callable實作類重寫的call()的傳回值
47 Object sum = futureTask.get();
48 System.out.println("總和為:"+sum);
49 } catch (InterruptedException e) {
50 e.printStackTrace();
51 } catch (ExecutionException e) {
52 e.printStackTrace();
53 }
54
55 }
56 }
此為本人學習筆記,若有錯誤,請不吝賜教