如何以不同的实现异步调用多个方法

时间:2019-01-02 21:01:34

标签: java spring multithreading asynchronous

我正在尝试异步调用一种方法12次。但是在调用之前,我为每个方法调用设置了不同的内容。我该如何以更优雅的方式做到这一点。

我也在用弹簧。

我知道@async,但是我该如何改变身体12次?

Callable<Object> task4 = () -> {

        CallContextHolder.setContext(callContext);
        try {

            Object m = dbQuery(userId);
            if (m == null){
                throw new RuntimeException();
            }
            return m;
        }
        catch (Exception e) {
            throw new IllegalStateException("task interrupted", e);
        }
    };
    Callable<Object> task5 = () -> {

        CallContextHolder.setContext(callContext); //here is the difference in every task
        try {

            Object m = dbQuery(userId);
            if (m == null){
                throw new RuntimeException();
            }
            return m;
        }
        catch (Exception e) {
            throw new IllegalStateException("task interrupted", e);
        }

1 个答案:

答案 0 :(得分:1)

您可以使用类似下面的方法

public Callable<Object> getCallable(CallContext context, String userId) { //replace types fro parameters to appropriate
    return () -> {
      CallContextHolder.setContext(callContext);
      try {
        Object m = dbQuery(userId);
        if (m == null){
            throw new RuntimeException();
        }
        return m;
      }
      catch (Exception e) {
        throw new IllegalStateException("task interrupted", e);
      }
   };
}

并像这样使用它

Callable<Object> call1 = getCallable(callContext, userId);
Callable<Object> call2 = getCallable(callContext, userId);

您可以尝试使用某种类型的循环来生成这些可调用对象并将其存储在列表中。