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