`
luozhonghua2014
  • 浏览: 62468 次
文章分类
社区版块
存档分类
最新评论

CyclicBarrier处理巨量的List(适用快速批量处理巨量数据 )

 
阅读更多
import java.util.ArrayList;import java.util.List;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class LargeListIntegerSum { private long sum;//存放整数的和 private CyclicBarrier barrier;//障栅集合点(同步器) private List list;//整数集合List private int threadCounts;//使用的线程数 public LargeListIntegerSum(List list,int threadCounts) { this.list=list; this.threadCounts=threadCounts; } /** * 获取List中所有整数的和 * @return */ public long getIntegerSum(){ ExecutorService exec=Executors.newFixedThreadPool(threadCounts); int len=list.size()/threadCounts;//平均分割List //List中的数量没有线程数多(很少存在) if(len==0){ threadCounts=list.size();//采用一个线程处理List中的一个元素 len=list.size()/threadCounts;//重新平均分割List } barrier=new CyclicBarrier(threadCounts+1); for(int i=0;ilist.size()?list.size():len*(i+1)))); } } try { barrier.await();//关键,使该线程在障栅处等待,直到所有的线程都到达障栅处 } catch (InterruptedException e) { System.out.println(Thread.currentThread().getName()+":Interrupted"); } catch (BrokenBarrierException e) { System.out.println(Thread.currentThread().getName()+":BrokenBarrier"); } exec.shutdown(); return sum; } /** * 分割计算List整数和的线程任务 * */ public class SubIntegerSumTask implements Runnable{ private List subList; public SubIntegerSumTask(List subList) { this.subList=subList; } public void run() { long subSum=0L; for (Integer i : subList) { subSum += i; } synchronized(LargeListIntegerSum.this){//在LargeListIntegerSum对象上同步 sum+=subSum; } try { barrier.await();//关键,使该线程在障栅处等待,直到所有的线程都到达障栅处 } catch (InterruptedException e) { System.out.println(Thread.currentThread().getName()+":Interrupted"); } catch (BrokenBarrierException e) { System.out.println(Thread.currentThread().getName()+":BrokenBarrier"); } System.out.println("分配给线程:"+Thread.currentThread().getName()+"那一部分List的整数和为:\tSubSum:"+subSum); } } public static void main(String[] args) { List list = new ArrayList(); int threadCounts = 10;//采用的线程数 for (int i = 1; i <= 1000000; i++) { list.add(i); } long start= System.currentTimeMillis(); LargeListIntegerSum countListIntegerSum=new LargeListIntegerSum(list,threadCounts); long sum=countListIntegerSum.getIntegerSum(); System.out.println("List中所有整数的和为:"+sum); long end= System.currentTimeMillis(); System.out.println(end-start); } }
分享到:
评论

相关推荐

    CyclicBarrier(处理方案示例).md

    CyclicBarrier(处理方案示例).md

    java.CyclicBarrier(处理方案示例).md

    java.CyclicBarrier(处理方案示例).md

    CountDownLatch和CyclicBarrier用法实例大全

    CountDownLatch常用于启动多线程后等待所有线程完成后再进行下一步,而CyclicBarrier则适用于多线程协同工作,每个阶段完成后所有线程再次聚合,比如赛车游戏的起点等待、分布式计算中的数据分区处理等场景。...

    CyclicBarrier的用法

    在实际应用中,`CyclicBarrier`常用于分布式计算、多步骤处理等场景,例如在多节点并行计算后需要聚合结果,或者在进行多轮迭代时确保所有工作都在下一轮开始前完成。 总结来说,`CyclicBarrier`是Java并发库中一种...

    CyclicBarrier的使用以及注意事项

    CyclicBarrier的使用以及注意事项

    CyclicBarrier用法.docx

    CyclicBarrier是Java并发编程中一个非常重要的工具类,它属于java.util.concurrent包,主要用于多线程间的协作,尤其在需要...在处理并行计算、分布式系统或者多步骤的处理流程时,CyclicBarrier是一个非常实用的工具。

    Java中的CountDownLatch与CyclicBarrier:深入理解与应用实践

    CountDownLatch适用于需要等待一组操作完成的场景,而CyclicBarrier适用于需要多个线程协同工作,直到所有线程都到达某个公共点后再一起执行的场景。在实际开发中,我们应该根据具体的应用场景选择合适的同步工具,...

    Java并发系列之CyclicBarrier源码分析

    Java并发系列之CyclicBarrier源码分析 CyclicBarrier是Java并发系列中的一种同步工具类,用于实现一组线程相互等待。当所有线程都到达某个屏障点后,再进行后续的操作。下面是对CyclicBarrier源码的详细分析。 ...

    CyclicBarrier,reentrantlock,condition模拟抢票

    用CyclicBarrier,reentrantlock,condition来完成同时购买,同步购买的功能 JUC系列之模拟抢票(N人同时抢票,票不足系统补仓,N-M人继续抢票) http://blog.csdn.net/crazyzxljing0621/article/details/77891620

    JAVA CyclicBarrier类详解.docx

    CyclicBarrier的异常处理机制遵循一种“要么全部要么全无”的模式。如果有线程因中断、失败或超时而提前离开屏障点,那么所有在屏障点等待的其他线程也会通过抛出`BrokenBarrierException`(如果是同时被中断,则抛...

    Java中的CyclicBarrier类最全讲义

    并发编程涉及到同时处理多个任务或数据流,从而提高程序的整体性能。 在并发编程中,多个线程通常需要相互协作,以便按照一定的顺序或条件执行任务。例如,某些情况下可能需要等待所有线程完成各自的工作后才能进行...

    Java并发实例之CyclicBarrier的使用

    Java并发实例之CyclicBarrier的使用 CyclicBarrier是Java中的一种多线程并发控制实用工具,和CountDownLatch非常类似,它也可以实现线程间的计数等待,但是它的功能比CountDownLatch更加复杂且强大。CyclicBarrier...

    28 人齐了,一起行动—CyclicBarrier详解.pdf

    或者在分布式系统中,等待所有节点完成数据同步或加载后再开始处理请求。这种同步机制可以帮助避免线程过早开始任务,确保所有线程在恰当的时刻协同工作,提高程序的效率和正确性。 总结一下,CyclicBarrier 的关键...

    java并发编程实战、驾校K1考试试卷批量生成mysql表结构和数据

    通过批量生成这样的表结构和数据,开发者可以快速搭建一个模拟驾驶考试系统的数据库,便于进行数据管理和查询。 在实际操作中,批量生成MySQL表结构和数据通常涉及到SQL语句的编写,比如`CREATE TABLE`来创建表,`...

    多线程的批量线程同步解决方案

    批量线程同步可能涉及到批量数据处理,例如数据库批量插入或文件批量读写。在这种情况下,可能会采用批处理技术,将大量小任务合并为少数大任务,减少线程切换开销。以下是一些策略: 1. **工作窃取队列(Work ...

    CountDownLatch 和 CyclicBarrier 的运用(含AQS详解)

    CountDownLatch 适用于“一个或多个线程等待其他线程完成任务”的场景,而 CyclicBarrier 更适合于“一组线程相互等待”的场景。通过了解它们的实现原理和应用场景,开发者可以更好地选择合适的工具来满足自己的需求...

    Java并发编程(CyclicBarrier)实例详解

    Java并发编程(CyclicBarrier)实例详解 Java并发编程(CyclicBarrier)实例详解主要介绍了Java并发编程(CyclicBarrier)实例详解的相关资料,JAVA编写并发程序的时候,我们需要仔细去思考一下并发流程的控制,...

    Java中CyclicBarrier的用法分析

    Java中的`CyclicBarrier`是一个同步辅助类,它允许一组线程互相等待,直到所有线程都到达一个公共的屏障点。这个屏障点就像一个交通信号灯,只有当所有的车辆(线程)都到达了交叉口,信号灯才会变为绿灯,允许它们...

    java线程并发cyclicbarrier类使用示例

    Java中的`CyclicBarrier`是用于多线程同步的一个强大工具,主要应用于一组线程需要在继续执行之前等待其他线程到达某个特定点的情况。它允许开发者定义一个屏障点,只有当所有参与的线程都到达这个屏障点时,它们才...

Global site tag (gtag.js) - Google Analytics