Java - 在另一个函数执行 30 秒后异步调用一个函数

标签 java spring-boot asynchronous

我想知道是否有一种方法可以在 java 中异步执行另一个函数 15 秒后执行一个函数。例如我有 2 个函数。

1. public void func1() {
}

2. public void func2() {
}

执行func1后,15秒后我希望执行func2。 理由 - Func1 对外部接口(interface)进行更新。外部接口(interface)需要大约15秒的时间来处理和存储数据。 15 秒后,我想从界面获取某些已处理的数据(URL)并将其存储在数据库中。我不希望用户等待完整的请求完成。请指教

最佳答案

从调用 func1() 的地方,生成一个将 hibernate 15 秒的线程,然后调用 func2()。下面是演示,其中 main() 方法调用 func1(),然后异步调用 func2。该线程负责等待 15 秒,而不是 main 方法。 main 方法立即解除阻塞。

import java.util.Date;

public class AsyncCall {

    public static void main(String[] args) {
        AsyncCall solution = new AsyncCall();
        solution.func1();
        
        //async call
        new Thread(() -> {
            try {
                Thread.sleep(15 * 1000);
                solution.func2("async call");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

        //sync call : no need to call this but just for demo
        solution.func2("sync call");
    }

    public void func1() {
        System.out.println(new Date() + " : func1 called");
    }

    public void func2(String arg) {
        System.out.println(new Date() + " : func2 called with arg: " + arg);
    }
}

结果:

Wed Mar 30 13:15:52 EDT 2022 : func1 called
Wed Mar 30 13:15:52 EDT 2022 : func2 called with arg: sync call
Wed Mar 30 13:16:07 EDT 2022 : func2 called with arg: async call

关于Java - 在另一个函数执行 30 秒后异步调用一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71680997/

相关文章:

java - 让 Ant 的 Java 任务打印空行

java - 我如何从号码选择器中跳过一些号码?

java - spring-boot-devtools 禁用调试,不能命中断点

c# - 限制异步请求而不阻塞

c# - 在 cli/c++ 中实现返回任务的 Async/Await 方法?

java - 如何重新启动java程序

Java - Spring AspectJ AfterThrowing

java - Spring Boot 2 健康端点 JSON 格式已更改

java - Spring Security 的 Spring Boot UI(例如添加用户角色等)

c# - 异步服务器套接字缺少第一个缓冲区流