h5网站制作视频,广东省东莞市建设培训中心网站,2024房价即将暴涨十大城市,网站建设销售如何接单关注#xff1a;CodingTechWork
引言 在一次数据割接需求中#xff0c;数据需要通过编程的方式进行转移割接到新平台#xff0c;此时若串行化方式#xff0c;无疑会拉锯此次战斗#xff0c;所以首当其冲要使用并发编程来降低割接时长。 本次主要考虑使用CountDownLatc…关注CodingTechWork
引言 在一次数据割接需求中数据需要通过编程的方式进行转移割接到新平台此时若串行化方式无疑会拉锯此次战斗所以首当其冲要使用并发编程来降低割接时长。 本次主要考虑使用CountDownLatch工具类进行并发编程的控制。
CountDownLatch
概述 在并发编程过程中如何让多个线程之间协调执行任务如主线程等所有其他异步线程执行完毕后再继续执行下面的步骤如何做到我们可以考虑使用CountDownLatch。 CountDownLatch主要是起到线程之间的同步协调作用而不是互斥。它可以让一个线程等待其他线程完成任务后再继续执行自己的任务。
原理
CountDownLatch是基于计数器的原理内部有一个整型的计数器。在类中使用CountDownLatch时需要制定一个初始的计数值该值指定的事需要等待的线程数目。关于计数值每当完成一个线程任务时会调用CountDownLatch的countDown()方法计数器值就会递减1。当计数值递减到0时就会唤醒等待的线程继续执行等待线程的任务。
并发编程实践
基本用法
创建CountDownLatch对象初始化指定计数值等待线程数。创建多线程线程执行完毕后调用countDown()方法。等待线程执行await()方法等待计数值递减为0后继续执行本线程的程序。
代码模板 public Boolean testCountDownLatchAsync() {ExecutorService taskExecutor Executors.newFixedThreadPool(10);//初始化final CountDownLatch latch new CountDownLatch(10);for (Integer customerId : customerIdList) {Runnable run new Runnable() {Overridepublic void run() {try {//异步执行代码} catch (Exception e) {log.error(线程执行失败错误信息, e);} finally {latch.countDown(); //每次调用CountDown()计数减1}}};taskExecutor.execute(run);}try {//等待所有线程执行完毕latch.await();//主程序执行到await()函数会阻塞等待线程的执行直到计数为0} catch (InterruptedException e) {e.printStackTrace();}taskExecutor.shutdown();//关闭线程池return true;}总结 CountDownLatch是一个同步工具类主要应用于多线程编程场景中可以用于控制等待线程的执行或者说是协调多个线程之间的同步。 用好这个工具类主要关注这个工具类的初始计数值的设置、countDown()方法、await()方法即可实现编程。