创建线程的方式三:实现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 }

 

上一篇:Java并发编程(1)- Callable、Future和FutureTask


下一篇:浅谈Java多线程之FutureTask