gpt4 book ai didi

java - 如何使用JAVA异步执行存储过程

转载 作者:行者123 更新时间:2023-11-30 01:46:07 25 4
gpt4 key购买 nike

我想从java函数异步调用一个存储过程,这意味着我的函数不应该等待该存储过程是否执行。它应该简单地调用该存储过程,而不应该等待执行。我已经尝试过使用线程,还有其他方法可以异步执行存储过程吗?

public void callLogonDetailSP(UserDetails userInfoSharedObject) {
new Thread(() -> {
int i = logonUserDetailsRepository.callLogonDetailSP(userInfoSharedObject.userName, userInfoSharedObject.password, userInfoSharedObject.userCityName);

}).start();

}

最佳答案

Thread 对象的更高级替代方案是 Executor 服务。更多信息请参见:

https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html

可以使用 Executors 类的静态方法创建它们。其中一些类似 newSingleThreadExecutor() 管理 1 个线程,但如果需要更多线程,您可以使用 newFixedThreadPool(int n) 它将创建一个管理 n< 的执行程序服务 线程。

这些类还使用一个 Future 对象来表示任务的结果(结果尚未计算,但您无论如何都会获得对它的引用,因此得名)。

ExecutorService executor = Executors.newSingleThreadExecutor();
Callable<Integer> c = new Callable<>() {
@Override public Integer call() {
return 0; //do some task here that returns an integer
}
};
Future<Integer> future = executor.submit(c);

请注意,CallableFuture 都是通用的,因此您可以使用任何类作为后台任务的结果。

对于安卓:如果您为 Android 开发,也可以使用 AsyncTask。非常有用,因为通常只能从 UI 线程修改 Android UI 元素,但此类提供了在任务完成后并在 UI 线程上运行的方法。

https://developer.android.com/reference/android/os/AsyncTask

关于java - 如何使用JAVA异步执行存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57899775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com