Java -----多线程 创建线程的方式三: 实现Callable接口----JDK 5.0 新增
1 package bytezero.thread2; 2 3 import java.util.concurrent.Callable; 4 import java.util.concurrent.ExecutionException; 5 import java.util.concurrent.FutureTask; 6 7 /** 8 * 9 * 创建线程的方式三: 实现Callable接口----JDK 5.0 新增 10 * 11 * 如何理解 实现Callable接口的方式创建多线程比实现Runable接口创建多线程的方式强大? 12 * 1.call()可以有返回值 13 * 2.call()可以抛出异常,被外面的操作捕获,获取异常的信息 14 * 3.Callable是支持泛型的 15 * 16 * 17 * @author Bytezero1·zhenglei! Email:420498246@qq.com 18 * create 2021-10-18 18:05 19 */ 20 21 // 1.创建一个实现Callable的实现类 22 class NumThread implements Callable{ 23 //2.实现call方法,将此线程需要执行的操作声明在 call方法中 24 @Override 25 public Object call() throws Exception { 26 int sum = 0; 27 for (int i = 1; i <100; i++) { 28 if(i % 2 == 0){ 29 System.out.println(i); 30 sum += i; 31 } 32 33 } 34 return sum; 35 } 36 } 37 38 public class ThreadNew { 39 public static void main(String[] args) { 40 //3.创建Callable接口实现类的对象 41 NumThread numThread = new NumThread(); 42 43 //4.将此allable接口实现类的对象作为参数传递到 FutureTask构造器中,并创建 44 //FutureTask对象 45 FutureTask futureTask = new FutureTask(numThread); 46 //将FutureTask的对象作为参数传递到 Thread的构造器中,创建Thread对象,并 47 //调用 start()方法 48 new Thread(futureTask).start(); 49 50 try { 51 //6.获取Callable中的call方法的返回值 52 //get() 返回值即为FutureTask构造器参数Callable实现重写的call()的返回值 53 Object sum = futureTask.get(); 54 System.out.println("总和为:"+sum); 55 } catch (InterruptedException e) { 56 e.printStackTrace(); 57 } catch (ExecutionException e) { 58 e.printStackTrace(); 59 } 60 } 61 }
本文来自博客园,作者:Bytezero!,转载请注明原文链接:https://www.cnblogs.com/Bytezero/p/15421835.html