首页 > 解决方案 > 当线程需要不同的时间来执行时,如何执行不同的操作?

问题描述

存在一个休息服务,它执行一些计算并将结果打印在一个 Excel 文件中,该文件作为响应返回。随着数据的增加,我们希望实现以下行为。如果文件在 3 秒内准备好,则返回 excel,否则,发送一条短信。文件稍后会邮寄给用户。

任何建议,我们如何在 Java 中实现此功能?

标签: javamultithreadingjava.util.concurrent

解决方案


使用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) {

}

推荐阅读