MyCallable.java 1.1 KB

123456789101112131415161718192021222324252627282930
  1. package com.sf.javase.thread;
  2. import java.util.concurrent.Callable;
  3. import java.util.concurrent.ExecutionException;
  4. import java.util.concurrent.FutureTask;
  5. // callable的泛型 就是call方法的返回类型
  6. // Callable 和 Runnable的区别
  7. // call()方法相比run()方法,有返回值,还可以抛出异常
  8. // 泛型对应返回类型 泛型和FutureTask也相一致
  9. // FutureTask本质上是Runnable的实现类 所以可以将其作为构造参数传给Thread
  10. public class MyCallable implements Callable<Integer> {
  11. @Override
  12. public Integer call() throws Exception {
  13. System.out.println("call begin");
  14. return 0;
  15. }
  16. public static void main(String[] args) throws ExecutionException, InterruptedException {
  17. MyCallable myCallable = new MyCallable();
  18. // 要把callable作为futureTask的参数
  19. FutureTask<Integer> futureTask = new FutureTask<>(myCallable);
  20. // 创建线程并执行
  21. new Thread(futureTask).start();
  22. Integer result = futureTask.get();
  23. System.out.println(result);
  24. }
  25. }