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

标签 java oracle asynchronous stored-procedures

我想从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/

相关文章:

java - ActionBar 溢出未出现

java - JPype 将参数传递给 Java

oracle - 在 Windows 10 上安装 Oracle 19c 的问题

swift - 在 Swift 中使用 DispatchQueue 时出现时间差异

java - 在编译时访问VM参数

java - 如何在java中设置JButton一次播放一个声音?

sql - 编译和刷新物化 View 有什么区别?

sql - 数据库 PL/SQL

c# - "too much"什么时候异步等待?所有方法都应该返回 Task 吗?

javascript - 在主文件中调用异步函数