当前位置:  首页>> 技术小册>> Java语言基础8-Java多线程

  • 和使用 Runnable 相比,Callable功能更加强大:
    • 可以有返回值。
    • 可以抛出异常。
    • 支持泛型的返回值。
    • 需要借助 FutureTask 类,比如获取返回结果。
  • Future 接口:

    • 可以对具体 Runnable 、Callable 任务的执行结果进行取消、查询是否完成、获取结果等。
    • FutureTask 是 Future 接口的唯一实现类。
    • FutureTask 同时实现了 Runnable 、Future 接口。它既可以作为 Runnable 被线程执行,也可以作为 Future 得到 Callable 的返回值。
  • 示例:

  1. package com.github.thread2.demo5;
  2. import java.util.concurrent.Callable;
  3. /**
  4. * @author maxiaoke.com
  5. * @version 1.0
  6. *
  7. */
  8. public class Call implements Callable<String> {
  9. @Override
  10. public String call() throws Exception {
  11. return "你好,世界";
  12. }
  13. }
  1. package com.github.thread2.demo5;
  2. import java.util.concurrent.ExecutionException;
  3. import java.util.concurrent.ExecutorService;
  4. import java.util.concurrent.Executors;
  5. import java.util.concurrent.Future;
  6. /**
  7. * @author maxiaoke.com
  8. * @version 1.0
  9. *
  10. */
  11. public class Test {
  12. public static void main(String[] args) throws ExecutionException, InterruptedException {
  13. // 创建线程池
  14. ExecutorService executorService = Executors.newFixedThreadPool(2);
  15. Future<String> submit = executorService.submit(new Call());
  16. String s = submit.get();
  17. System.out.println(s);
  18. // 关闭线程池
  19. executorService.shutdown();
  20. }
  21. }

该分类下的相关小册推荐: