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