我想从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);
请注意,Callable
和 Future
都是通用的,因此您可以使用任何类作为后台任务的结果。
对于安卓:
如果您为 Android 开发,也可以使用 AsyncTask
。非常有用,因为通常只能从 UI 线程修改 Android UI 元素,但此类提供了在任务完成后并在 UI 线程上运行的方法。
https://developer.android.com/reference/android/os/AsyncTask
关于java - 如何使用JAVA异步执行存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57899775/