java——future&callable

简述

  八股文面试常出现的题目:java中如何创建线程?

  答:1.直接继承Thread类 2.实现Runnable接口 3. 实现Callable接口

  Runnable和Callable的区别在于Callable能在线程执行完任务之后获取执行结果

Callable

  Callable任务只能在线程池中使用,你翻遍Thread类都不会找到Callable的身影

  你可以像这样创建一个callable任务

Callable<String> callable = () -> {
    // Perform some computation
    Thread.sleep(2000);
    return "Return some result";
};

future

  future和callable配套使用,future就是一个接口,通过future可以对callable任务进行取消、查询是否完成、获取结果等操作

  一般来说,当我们执行一个长时间运行的任务,例如IO操作、远程调用,使用Future就可以让我们暂时去处理其他的任务,等长任务执行完毕再返回其结果

  我们可以用线程池的submit方法将这个任务交给线程池中的一个线程执行,submit方法返回一个Future类

  然后我们就可以愉快地使用future查询线程的执行结果了

public class CallableExample {
   public static void main(String[] args) throws InterruptedException, ExecutionException {
      ExecutorService executorService = Executors.newSingleThreadExecutor();
      Callable<String> callable = () -> {
         Thread.sleep(5000);
         return "Hello from Callable";
      };
      Future<String> future = executorService.submit(callable);
      String result = future.get();
      executorService.shutdown();
   }
}

  主线程在future.get()的时候会阻塞自己,直到callable的任务完成

FutureTask

  待补

references

https://www.cnblogs.com/flydean/p/12680281.html

https://zhuanlan.zhihu.com/p/54459770

https://dayarch.top/p/java-future-and-callable.html

https://juejin.cn/post/6970558076642394142

 

posted @ 2023-03-08 23:20  艾尔夏尔-Layton  阅读(14)  评论(0编辑  收藏  举报