java - 有没有办法以相同的方法使用 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;
}