创建线程的方式三:实现Callable接口-----JDK5.0 新增
- 1 package com.yhqtv.java2;
- 2
- 3 /*
- 4 * 创建线程的方式三:实现Callable接口-----JDK5.0 新增
- 5 *
- 6 * 如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大?
- 7 * 1.call()可以有返回值的。
- 8 * 2.call()可以抛出异常,被外面的操作捕获,获取异常的信息
- 9 * 3.Callable是支持泛型的
- 10 * @author XMKJ yhqtv.com Email:yhqtv@qq.com
- 11 * @create 2020-04-29-22:06
- 12 *
- 13 */
- 14
- 15 import java.util.concurrent.Callable;
- 16 import java.util.concurrent.ExecutionException;
- 17 import java.util.concurrent.FutureTask;
- 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 sum+=i;
- 27 }
- 28 }
- 29 return sum;
- 30 }
- 31 }
- 32
- 33 public class ThreadNew {
- 34 public static void main(String[] args) {
- 35 // 3.创建Callable接口实现类的对象
- 36 NumThread numThread=new NumThread();
- 37 // 4.将此Callable接口实现类的对象作为传递到FutureTask构造器中,创建FutureTask的对象
- 38 FutureTask futureTask = new FutureTask(numThread);
- 39 // 5.将FutureTask的对象作为参数传递到Thread类的构造器中,创建Thread对象,并调用start()
- 40 new Thread(futureTask).start();
- 41
- 42 try {
- 43 //6.获取Callable中call方法的返回值
- 44 //get()返回值即为FutuerTask构造器参数Callable实现类重写的call()的返回值。
- 45 Object sum = futureTask.get();
- 46 System.out.println(sum);
- 47 } catch (InterruptedException e) {
- 48 e.printStackTrace();
- 49 } catch (ExecutionException e) {
- 50 e.printStackTrace();
- 51 }
- 52 }
- 53 }