ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java高级(一) Future机制

2020-08-04 06:31:26  阅读:1633  来源: 互联网

标签:Java 结果 高级 接口 Callable Future FutureTask 执行


Future机制

1 为什么出现Future机制

常见的两种创建线程的方式。一种是直接继承Thread,另外一种就是实现Runnable接口。

这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。

从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。

Future模式的核心思想是能够让主线程将原来需要同步等待的这段时间用来做其他的事情。

因为可以异步获得执行结果,所以不用一直同步等待去获得执行结果。

2 Future结构

类图:

image-20200804060937014

2.1 Future接口

Future接口用于对具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果。

必要时可以通过get方法获取执行结果,该方法会阻塞直到任务返回结果。

通过接口的定义,可以看到实现Future接口的子类会具有这些行为:

  • 可以取消这个执行逻辑,如果这个逻辑已经正在执行,提供可选的参数来控制是否取消已经正在执行的逻辑。

  • 可以判断执行逻辑是否已经被取消。

  • 可以判断执行逻辑是否已经执行完成。

  • 可以获取执行逻辑的执行结果。

  • 可以允许在一定时间内去等待获取执行结果,如果超过这个时间,抛TimeoutException

2.2 FutureTask类

FutureTask是Future的具体实现。

FutureTask实现了RunnableFuture接口。RunnableFuture接口又同时继承了FutureRunnable 接口。

所以FutureTask既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值。

FutureTask<Integer> task = new FutureTask<>(new Callable<Integer>() {

    @Override
    public Integer call() throws Exception {
        Thread.sleep(3000);
        return 5;
    }
});

new Thread(task).start();

//task.get()
//。...

参考

Java的Future机制详解

标签:Java,结果,高级,接口,Callable,Future,FutureTask,执行
来源: https://www.cnblogs.com/lyldelove/p/13431083.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有