//生成线程池最大3个并发线程
ExecutorService executorService = Executors.newFixedThreadPool(3);
for(BookDO bookDO : Books){
//多线程执行子任务
executorService.submit(new BookCollector(bookDO, EagleEye.getRpcContext());
}
//不再接收新的线程入队列
executorService.shutdown();
//等待所有的线程执行完毕,如果timeout返回false
if(!executorService.awaitTermination(30, TimeUnit.SECONDS)){
//取消还未完成的任务线程
executorService.shutdownNow();
}
private BookDO bookDO;
private Object ctx;
public RouteCollector(BookDO bookDO, Object ctx){
this.bookDO = bookDO;
this.ctx = ctx;
}
@Override
public void run() {
try{
EagleEye.setRpcContext(ctx);
//业务逻辑处理方法
doCollectBook(this.bookDO);}catch (Exception e){
e.printStackTrace();
}finally {
EagleEye.clearRpcContext();
}
}
}
版权声明:本文为somilong原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。