天天看點

建立線程的方式三:實作Callable接口

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 }      

此為本人學習筆記,若有錯誤,請不吝賜教