首页 > 解决方案 > 有没有办法以相同的方法使用 Future.get() 而不会阻塞主线程

问题描述

我们处理了数千个指标的时序观察结果,它们都归结为相同的方法,通过各自的处理器进行处理。我以多线程方式将观察结果发送到各自的处理器,但 future.get() 阻塞主线程的时间比预期的要长。有没有办法改进它?

  ExecutorService[] pools = new ExecutorService[Runtime.getRuntime().availableProcessors()];
...
  @Override
  public Observation apply(final Observation observation) {
    Callable<Observation> task = new Processor(observation);
    int hash = Math.abs(observation.getMetricId().hashCode());

    Future<Observation> result = pools[hash % pools.length].submit(task);
    try {
      return result.get();
    } catch (InterruptedException | ExecutionException e) {
      e.printStackTrace();
    }
    return null;
  }

标签: javamultithreadingthreadpoolfutureexecutorservice

解决方案


推荐阅读