java - 当线程需要不同的时间来执行时,如何执行不同的操作?
问题描述
存在一个休息服务,它执行一些计算并将结果打印在一个 Excel 文件中,该文件作为响应返回。随着数据的增加,我们希望实现以下行为。如果文件在 3 秒内准备好,则返回 excel,否则,发送一条短信。文件稍后会邮寄给用户。
任何建议,我们如何在 Java 中实现此功能?
解决方案
使用Future
带超时:
public String getExel() {
CompletableFuture<String> getter = CompletableFuture.supplyAsync(() -> "result");
try {
return getter().get(3, TimeUnits.SECONDS);
} catch(TimeoutException ex) {
// invoke email sending
getter.thenAcceptAsync(result -> sendEmail(result));
// I will send you email later
return "XXx to indicate you will send him later";
}
}
public void sendEmail(String resultFromGetExel) {
}
推荐阅读
- gpu - 使用 GPU 对具有 128 个颜色通道的图像进行光栅化
- c# - 是否可以使用 IsGrouped=true 和 C# 中的 CollectionView.GroupHeaderTemplate 在 CollectionView 中获取所选项目的组键
- java - Java .size() 函数未显示 ArrayList 的实际大小
- discord.js - Discord.js 权限覆盖创建频道不会更改权限?
- angular - 如何获取部分 JSON 响应并转换为某个接口的数组?
- javascript - 创建自定义倒数计时器
- styled-components - 为什么 css-in-js 系统需要 ThemeProvider/useTheme
- r - 在 R 中以概率取两个数字之一的随机变量
- javascript - 带有偏移问题的 Jquery scrollTop()
- javascript - 管道数据以减少分页的 Ajax 调用不显示第二次调用的表数据