当前位置: 首页 > 知识库问答 >
问题:

如何使用ExecutorService管理未知数量的调用项的返回值?

须旭
2023-03-14

我想创建一个具有固定线程池大小的singleton-ExecutorService。另一个线程将向ExecutorService提供调用项,我希望在执行完成后立即解析调用项的结果(最好)。

我真的不确定如何适当地执行这一点。我最初的想法是singleton-ES中的一个方法,它通过“submit(Callable)”向ExecutorService添加一个Callable,并将得到的Future存储在Singleton中的HashMap或ArrayList中。另一个线程将在给定的时间间隔内检查Futures的结果。

但不知何故,这个解决方案并不“感觉正确”,我在其他地方也没有找到解决方案,所以在我编写代码之前,我会问你们一些我后来后悔的东西。你会如何处理这个问题?

我期待着你的回复!

共有1个答案

慎建本
2023-03-14
import java.util.concurrent.*;

public class PostProcExecutor extends ThreadPoolExecutor {

  // adjust the constructor to your desired threading policy
  public PostProcExecutor(int corePoolSize, int maximumPoolSize,
      long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) {
    super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
  }

  @Override
  protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable) {
    return new FutureTask<T>(callable) {
      @Override
      protected void done()
      {
        if(!isCancelled()) try {
          processResult(get());
        } catch(InterruptedException ex) {
          throw new AssertionError("on complete task", ex);
        } catch(ExecutionException ex) {
          // no result available
        }
      }
    };
  }

  protected void processResult(Object o)
  {
    System.out.println("Result "+o);// do your post-processing here
  }
}
 类似资料:
  • 我找到了一些很好的SO链接(如何从异步回调函数返回值?以及从node.js中的回调函数返回值等),但它们并不是不能为我的问题提供解决方案。 我的问题:能够得到异步调用的结果,但我如何使用这个结果返回我的函数? 这里获取callBackResponse的值为true或false,并希望将该值用作:

  • 我正在使用MyBatis调用PL SQL数据库中的一个函数。该函数中有一个OUT参数为布尔值,如下所示: 我的问题是,当我试图从xml映射器调用函数时,每次尝试mybatis都不能识别布尔输出,并抛出me和错误,就像不兼容的类型一样。另外,当我试图从PLSQL Developer测试该函数时,它会进行如下转换并以位形式返回布尔值。 忽略这个整数并指定MyBatis将输出视为布尔值是正确的?我怎么能

  • 问题内容: 我正在使用Postgresql 8.3,并具有以下简单功能,该功能会将a返回 给客户端 现在,我可以使用以下SQL命令来调用此函数并操纵返回的游标,但是游标名称是由PostgreSQL自动生成的 此外,如38.7.3.5中所述,显式地将游标名称声明为函数的输入参数 。返回游标。我可以声明自己的游标名称并使用此游标名称来操纵返回的游标,而不是为我自动生成的Postgresql吗?如果不是

  • 问题内容: 我将ajax技术与php结合使用,我想知道如何从onreadstatechange调用的函数中获取返回变量。 一个Java函数称为onsubmit,然后调用一个php脚本来验证数据库中的某些内容,并根据结果返回true或false。 这是我遇到问题的地方,我希望onsubmit =“ return snappyajaxfunction()”根据php的结果返回false或true。 我

  • 相对来说,我是一个与Java智能合约交互的新手,在尝试检索智能合约函数返回的tuple[]时遇到了一个问题。这是我想调用的函数的ABI定义: 以下是智能合约代码的链接:https://polygonscan . com/address/0x 920 f 22 E1 e 5 da 04504 b 765 f 8110 ab 96 a 20 e 6408 BD # code 下面是我编写的调用该函数的

  • 问题内容: 我正在尝试获取返回值,但始终无法定义。 我不确定如何获取任何返回值并在其他地方使用它?我需要使用此返回值来与其他函数进行验证,但是它似乎在范围之内。 这是我的代码: 问题答案: 移动以下行: 进入回调: 如果希望返回某些内容,则还需要向其添加回调,以便可以使用它的返回值。例如,如果您希望这样做: 这将无法正常工作,因为内容的最终值将被异步检索。相反,您需要这样做: 您不能异步返回数据。