【Java】异步线程的返回封装接口Function

一、问题

1.1、环境
电脑环境:Windows 10;
开发工具:IntelliJ IDEA;
数据库环境:Redis 3.2.100
JDK环境: Jdk1.8;

1.2、问题

Future,是异步线程调用的返回值容器接口,可以封装自己想反悔的实体类;一般你再main方法里写了一个异步调用的线程任务,表面上,它会很快就执行完了,实际上,后台任然在执行;就好比:你在楼下玩耍,你妈在楼上让你回家吃饭,你妈喊一嗓子,你听到了,喊你吃饭的任务就完成了;但是实际上,等你往回走,爬楼梯,开家门,洗手,吃饭,还有一段时间需要执行这些步骤;等你到家后,你才能吃到饭;Future接口容器里封装这你,你妈看到你回家了,才会开饭;

二、解答

删除了注解后的源码源码

package java.util.concurrent;

public interface Future<V> {

    boolean cancel(boolean mayInterruptIfRunning);

    boolean isCancelled();

    boolean isDone();

    V get() throws InterruptedException, ExecutionException;
    
    V get(long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;
}

2.1综述:

Function代表异步调用的计算结果;方法被提供出来去检查是否计算已经完成;为了等待他的计算,并且找回计算结果;
①get()方法:任务执行时会被阻塞,只有当异步计算完成后,这个计算结果可以并且只能通过get方法找回;
②cancel()方法:通过cancel方法消除;
③额外的方法被提供来确定,是否任务正常完成或者被取消了;一旦计算完成,就不能被取消了;
④如果你希望使用Future来使任务可取消,但是没有提供有用的结果;你可以定义Futrue的形式并且返回null作为底层任务的结果;

2.2分述

1.cancel()方法

  • 尝试关闭任务的执行.当任务已经完成,已经被取消或者因为某些原因不能够取消,这个方法将会失败;
  • 如果任务还没启动,当Future.cancel()方法被调用,那么这个任务将永远不会被启动了;
  • 如果任务已经启动,那么mayInterruptInRunning 参数决定终止任务的企图 是否 能 执行任务的线程中断命令;
  • 当cancel()方法返回true时,随后的调用isDone()方法将永远返回true;
  • 会后再调用isCancelled()方法将永远返回true;
  • 如果线程执行这个任务应该被终止掉,mayInterruptIfRunning 值应该是true;否则进程中的任务会被完成;(而不是终止);
  • 如果返回false,则任务不能够被终止,很可能的原因是:它已经被正常完成了;

2.isCancelled()方法
是否被取消了:如果任务在完成之前被cancel()了,则返回true,否则返回false;

3.isDone()方法
是否任务已经被完成;

4.get()方法
等待异步线程结束,然后返回值结果;如果任务被取消了,会报CancellationException异常;如果当前线程被中断会报InterruptedException异常;

5.get(long timeout,TimeUnit unit)
给定超时时间,并返回结果;timeout是最大等待时间;
unit是时间的单位,可以是秒,也可以是毫秒等;方法会返回线程的结果;因为前面有可取消方法,所以这里也可能会抛CancellationException异常,因为任何线程都可能被终止,所以它也会抛出InterruptedException异常;另外,加了超时时间,所以它还会抛出TimeoutException异常;

完毕~

三、总结

欢迎关注我的
CSDN博客: https://blog.csdn.net/River_Continent
微信公众号:幕桥社区
在这里插入图片描述
知乎:张牧野, https://www.zhihu.com/people/zhang-mu-ye-37-76/activities
简书: https://www.jianshu.com/u/02c0096cbfd3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陶洲川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值