我们在RPC接口开发的过程中,总会碰到这样的情况,比如一个接口分别需要调用不同的系统返回给前端action。但是在考虑高性能的情况下,需要思考下实现这种方案的最优解。首先第一种思路,各系统之间独立,未产生直接联系,就是串行进行开发,调用完A系统,在调用B系统,然后再调用C系统。这样做事没有任何的问题,但是,这不符合高性能、高可用的设计原则。那么,我们就需要换一种思路,用到并行的开发思路。在保障系统的性能的前提下,采用多线程开发。提高RPC接口的访问效率。若碰到需要使用需要返回值的线程的话,Callable<V> 是一种不错的解决方案。
首先,我们创建一个线程池,对线程进行管理和分配。
ExecutorService executor = Executors.newFixedThreadPool(3);
接着,用Future来接受返回值,并关闭线程池,释放资源。
List<Future<Map<String,String>>> results = new ArrayList<Future<Map<String,String>>>();
results.add(executor.submit(new Thread1()));
results.add(executor.submit(new Thread2()));
results.add(executor.submit(new Thread3()));
executor.shutdown();
最后,用主线程的容器装载其他线程的返回值。
for (int i = 0; i < results.size(); i++) {
try {
map.putAll(results.get(i).get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}