创建执行线程方式三:实现Callable接口
Callable接口
① Java 5.0 在 java.util.concurrent 提供了一个新的创建执行 线程的方式:Callable 接口
② Callable 接口类似于 Runnable,两者都是为那些其实例可 能被另一个线程执行的类设计的。
但是 Runnable 不会返 回结果,并且无法抛出经过检查的异常。
③ Callable 需要依赖FutureTask ,FutureTask 也可以用作闭 锁
TestCallable
package com.aff.juc; import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; /*1.创建执行线程的方式三:实现Callable接口,相较于实现Runable接口的方式, 方法可有有返回值,并且可以跑出异常. 2.执行Callable接口方式,需要FutureTask 实现类的支持,用于接收运算结果。 FutureTask 是 Future 接口的实现类 */ public class TestCallable { public static void main(String[] args) { ThreadDemo4 td4 = new ThreadDemo4(); // 1.执行Callable方式,需要FutureTask实现类支持,用于接收计算结果 FutureTask<Integer> result = new FutureTask<>(td4); new Thread(result).start(); // 2.接收线程运算后的结果 try { Integer sum = result.get(); System.out.println(sum); System.out.println("-----------"); } catch (Exception e) { e.printStackTrace(); } } } /* * class ThreadDemo3 implements Runnable{ * * @Override public void run() { } } */ class ThreadDemo4 implements Callable<Integer> { @Override public Integer call() throws Exception { int sum = 0; for (int i = 0; i < 100; i++) { System.out.println(i); sum += i; } return sum; } }
All that work will definitely pay off