Java多线程消费一个list

付威     2019-03-23   1062   3min  

在项目中,常常会需要处理一个list数据列表,使用多线程来加速数据的处理。

需要保证两点:

  1. 能灵活控制线程的数量
  2. 能够同步的完成一批list的数据

可以使用信号量和线程池,具体实现代码如下:

public static <T> void startWithMultiThread(List<T> list, int nThread, Consumer<T> func) {
        if (CollectionUtils.isEmpty(list)) {
            return;
        }
        if (nThread <= 0) {
            return;
        }
        if (func == null) {
            return;
        }
        if (CollectionUtils.isEmpty(list)) {
            return;
        }
        Semaphore semaphore = new Semaphore(nThread);//定义几个许可
        ExecutorService executorService = Executors.newFixedThreadPool(nThread);//创建一个固定的线程池
        for (T obj : list) {
            try {
                semaphore.acquire();
                executorService.execute(() -> {
                    try {
                        func.accept(obj);
                        semaphore.release();
                    } catch (Exception ex) {
                
                    }
                });
            } catch (InterruptedException e) {

            }
        }
        executorService.shutdown();
    }

(本文完)

作者:付威

博客地址:http://blog.laofu.online

如果觉得对您有帮助,可以下方的RSS订阅,谢谢合作

如有任何知识产权、版权问题或理论错误,还请指正。

本文是付威的网络博客原创,自由转载-非商用-非衍生-保持署名,请遵循:创意共享3.0许可证

交流请加群113249828: 点击加群   或发我邮件 laofu_online@163.com

付威

获得最新的博主文章,请关注上方公众号