多线程callable

旧城等待, 2021-11-05 14:10 539阅读 0赞

传统的thread里面,在执行完任务之后无法获取执行结果。通过共享变量或者使用线程通信获取结果,比较麻烦。
就是Runnable接口,线程的真正业务在run里面。
jdk1.5 开始提供Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。

二 future
Callable 和Future位于java.util.concurrent 包下。
Callable 是个接口,只有一个方法call().通常配合ExecutorService使用。
Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果。必要时可以通过get方法获取执行结果,该方法会阻塞直到任务返回结果

  1. package com.hanshow.testThread;
  2. import java.util.concurrent.Callable;
  3. import java.util.concurrent.ExecutionException;
  4. import java.util.concurrent.Executor;
  5. import java.util.concurrent.Executors;
  6. import java.util.concurrent.FutureTask;
  7. public class TestCallable {
  8. static class SumTask implements Callable<Long> {
  9. @Override
  10. public Long call() throws Exception {
  11. long sum = 0;
  12. for (int i = 0; i < 9000; i++) {
  13. sum += i;
  14. }
  15. return sum;
  16. }
  17. }
  18. public static void main(String[] args) throws ExecutionException, InterruptedException {
  19. System.out.println("Start:" + System.nanoTime());
  20. FutureTask<Long> futureTask = new FutureTask<Long>(new SumTask());
  21. Executor executor=Executors.newSingleThreadExecutor();
  22. executor.execute(futureTask);
  23. System.out.println(futureTask.get());
  24. System.out.println("End:" + System.nanoTime());
  25. }
  26. }

发表评论

表情:
评论列表 (有 0 条评论,539人围观)

还没有评论,来说两句吧...

相关阅读

    相关 线】——Callable创建线

        之前小编的博客简单介绍了两种创建线程的方式,随着小编工作过程对这一部分的深入,对这一部分有更深入的理解,也知道其他创建多线程方式,在原来的基础在深入一下! 回顾

    相关 线实现之Callable

    创建线程的两种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。如果需要获取执行结果,就必须

    相关 线callable

    传统的thread里面,在执行完任务之后无法获取执行结果。通过共享变量或者使用线程通信获取结果,比较麻烦。 就是Runnable接口,线程的真正业务在run里面。 jd