标题几乎总结了一下。

我想知道callable的概念和想法。我已经阅读了question here关于可调用和可运行之间的区别。但没有人显示代码并详细说明什么是可调用对象。我不想知道它们之间的区别。我想知道 ,

  • 什么是可调用的?
  • 何时使用它们以及如何使用它们。
  • 当他们开始行动时
    安卓。
  • 最佳答案

    您可以检查此example:

    在此示例中,Callable任务在一秒钟后返回执行该任务的线程的名称。我们正在使用Executor框架并行执行100个任务,并使用Future获取已提交任务的结果。

    package com.journaldev.threads;
    
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    
    public class MyCallable implements Callable<String> {
    
        @Override
        public String call() throws Exception {
            Thread.sleep(1000);
            //return the thread name executing this callable task
            return Thread.currentThread().getName();
        }
    
        public static void main(String args[]){
            //Get ExecutorService from Executors utility class, thread pool size is 10
            ExecutorService executor = Executors.newFixedThreadPool(10);
            //create a list to hold the Future object associated with Callable
            List<Future<String>> list = new ArrayList<Future<String>>();
            //Create MyCallable instance
            Callable<String> callable = new MyCallable();
            for(int i=0; i< 100; i++){
                //submit Callable tasks to be executed by thread pool
                Future<String> future = executor.submit(callable);
                //add Future to the list, we can get return value using Future
                list.add(future);
            }
            for(Future<String> fut : list){
                try {
                    //print the return value of Future, notice the output delay in console
                    // because Future.get() waits for task to get completed
                    System.out.println(new Date()+ "::"+fut.get());
                } catch (InterruptedException | ExecutionException e) {
                    e.printStackTrace();
                }
            }
            //shut down the executor service now
            executor.shutdown();
        }
    
    }
    

    您还可以检查 Using Callable to Return Results From Runnables

    10-08 12:08