Callable 使用

Posted wscy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Callable 使用相关的知识,希望对你有一定的参考价值。

# Callable 使用

一、问题

继承 Thread 类或者实现 Runnable 接口,run()方法返回类型是void,即启动的线程任务无返回结果。

二、解决

  1. 实现 Callable 接口

    public class TaskWithResult implements Callable<String> {
    
        private int id;
    
        public TaskWithResult(int id) {
            this.id = id;
        }
    
        public String call() {
            return "result of TaskWithResult " + id;
        }
    }

    ps:Callable<String>String是线程任务返回结果的数据类型,与call()方法返回类型对应。

  2. 执行线程任务

    ExecutorService exec = Executors.newCachedThreadPool();
    ArrayList<Future<String>> results = new ArrayList<Future<String>>();
    for (int i = 0; i < 10; i++) {
        // ExecutorService.submit()产生Future对象
        results.add(exec.submit(new TaskWithResult(i)));
    }
  3. Future对象

    • isDone(),判断任务是否执行完成。
    • get(),获取任务执行结果,任务未完成则阻塞。

以上是关于Callable 使用的主要内容,如果未能解决你的问题,请参考以下文章

Java线程池详解

Java 线程池详解

PHP Callback/Callable 类型使用

我可以在没有 ExecutorService 的情况下使用 Callable 线程吗?

Java线程池详解

使用 Callable 和 Future 时程序不会退出