java 多线程之Executors.newFixedThreadPool

//生成线程池最大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();
}


public class BookCollector implements Runnable{
    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版权协议,转载请附上原文出处链接和本声明。