前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java多线程消费一个list

Java多线程消费一个list

作者头像
付威
发布于 2020-01-21 09:55:46
发布于 2020-01-21 09:55:46
2K00
代码可运行
举报
运行总次数:0
代码可运行

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

需要保证两点:

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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();
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-03-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
并发设计模式实战系列(17):信号量(Semaphore)
今天为大家带来的是并发设计模式实战系列,第十七章信号量(Semaphore),废话不多说直接开始~
摘星.
2025/05/20
1430
(四)Java并发学习笔记--线程不安全类与写法
下图中,我们只画出了最常见的几种情况,我们常见的Collections集合都是线程不安全的
用户1212940
2022/04/13
2100
(四)Java并发学习笔记--线程不安全类与写法
​Java 利用JUC CountDownLatch 线程池Executors 实现多线程操作
Java 利用JUC CountDownLatch 线程池Executors 实现多线程操作
javaNice
2023/11/06
2540
Java多线程06——JUC并发包02
​​CountDownLatch​​ 同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
头发还在
2023/10/16
1930
Java多线程06——JUC并发包02
Java Review - 并发编程_ 信号量Semaphore原理&源码剖析
Semaphore信号量也是Java中的一个同步器,与CountDownLatch和CycleBarrier不同的是,它内部的计数器是递增的,并且在一开始初始化Semaphore时可以指定一个初始值,但是并不需要知道需要同步的线程个数,而是在需要同步的地方调用acquire方法时指定需要同步的线程个数。
小小工匠
2021/12/30
3670
Java Review - 并发编程_ 信号量Semaphore原理&源码剖析
java多线程系列:Semaphore和Exchanger
Semaphore思想在分布式中也有应用,分布式限流就是典型的案例。现在举个小例子来使用Semaphore
云枭
2018/09/28
4750
java多线程系列:Semaphore和Exchanger
java线程的创建和管理(二)
Java 中的线程同步和互斥机制可以防止多个线程同时访问共享资源导致数据不一致的问题。Java 中的线程同步和互斥机制有多种实现方式,包括 synchronized 关键字、Lock 接口、Semaphore 类、Condition 接口等。
堕落飞鸟
2023/04/02
3290
Java并发:Semaphore信号量源码分析
JUC 中 Semaphore 的使用与原理分析,Semaphore 也是 Java 中的一个同步器,与 CountDownLatch 和 CycleBarrier 不同在于它内部的计数器是递增的,那么,Semaphore 的内部实现是怎样的呢?
搜云库技术团队
2019/10/18
1K0
Java多线程总结
对于进程和线程的概念可以简单的理解成一个包含关系,例如:一个人个体可以称为社会的一个进程,人可以同时做很多事情,这个称之为线程
付威
2020/01/21
5410
Java中的信号量semaphore-Java快速入门教程
我们将从java.util.concurrent.Semaphore开始。我们可以使用信号量来限制访问特定资源的并发线程数。
jack.yang
2025/04/05
840
线程池问题探究
在执行上面的代码的时候,出现了 reject 的异常,按道理说有semaphore.acquire(); 拦截,不应该会出现 reject 的异常。
付威
2023/10/17
1330
Java并发编程与高并发之线程安全策略
1、安全的发布对象,有一种对象只要发布了,就是安全的,就是不可变对象。一个类的对象是不可变的对象,不可变对象必须满足三个条件。
别先生
2020/02/12
4760
【多线程】JUC的常见类,Callable接口,ReentranLock,Semaphore,CountDownLatch
所以创建一个线程,希望它给你返回一个结果,那么使用 Callable 更加方便一些
椰椰椰耶
2024/09/20
820
【多线程】JUC的常见类,Callable接口,ReentranLock,Semaphore,CountDownLatch
面试官:说说CountDownLatch,CyclicBarrier,Semaphore的原理?
CountDownLatch适用于在多线程的场景需要等待所有子线程全部执行完毕之后再做操作的场景。
艾小仙
2021/01/05
5610
线程池和信号量
当我们需要执行一个异步任务时,通常会创建一个线程并启动它,通常任务执行完,线程会被回收,这的确很方便。但我们有大量的任务需要去执行,高并发的情况下,我们都需要不断的创建线程,创建线程和执行线程任务时非常耗费系统资源的,所以我们需要使用线程池,线程池很好的避免了这种情况,并且能很好的控制线程的执行。
方志朋
2022/11/30
4910
Java并发编程之Semaphore
Semaphore是用来限制访问特定资源的并发线程的数量,相对于内置锁synchronized和重入锁ReentrantLock的互斥性来说,Semaphore可以允许多个线程同时访问共享资源。
布禾
2021/04/15
2200
Java并发编程,深度探索J.U.C - AQS
java.util.concurrent(J.U.C)大大提高了并发性能,AQS 被认为是 J.U.C 的核心。
李红
2019/05/29
3910
Java并发编程,深度探索J.U.C - AQS
并发相关工具
我们在并发编程中,经常会使用到一些工具来帮助我们控制线程。本章节就会对CountDownLatch、CyclicBarrier、Semaphore工具的应用进行简单的介绍。
胖虎
2020/12/22
5450
Java同步组件之CountDownLatch,Semaphore
Java同步组件概况 CountDownLatch : 是闭锁,通过一个计数来保证线程是否一直阻塞 Semaphore: 控制同一时间,并发线程数量 CyclicBarrier:字面意思是回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。 ReentrantLock:是一个重入锁,一个线程获得了锁之后仍然可以反复加锁,不会出现自己阻塞自己的情况。 Condition:配合ReentrantLock,实现等待/通知模型 FutureTask:FutureTask实现了接口Future,同Fu
开源日记
2021/02/05
5310
理解Semaphore信号量
synchronized 和 ReentrantLock 都是一次只允许一个线程访问某个资源,Semaphore(信号量)可以指定多个线程同时访问某个资源。
黑洞代码
2021/04/08
3390
相关推荐
并发设计模式实战系列(17):信号量(Semaphore)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验