ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CountDownLatch demo演示数据分片多线程处理

2022-08-23 14:00:46  阅读:177  来源: 互联网

标签:thread 处理 demo CountDownLatch 线程 分片 多线程 pool


# CountDownLatch demo演示数据分片多线程处理
package com.example.core.mydemo;

import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * 打印结果:
 * begin
 * 当前线程名称=pool-1-thread-1
 * 业务逻辑多线程处理,可以按数据集合分片来处理
 * 当前线程名称=pool-1-thread-2
 * 业务逻辑多线程处理,可以按数据集合分片来处理
 * 当前线程名称=pool-1-thread-5
 * 业务逻辑多线程处理,可以按数据集合分片来处理
 * 当前线程名称=pool-1-thread-6
 * 业务逻辑多线程处理,可以按数据集合分片来处理
 * 当前线程名称=pool-1-thread-7
 * 业务逻辑多线程处理,可以按数据集合分片来处理
 * 当前线程名称=pool-1-thread-3
 * 业务逻辑多线程处理,可以按数据集合分片来处理
 * 当前线程名称=pool-1-thread-4
 * 业务逻辑多线程处理,可以按数据集合分片来处理
 * 当前线程名称=pool-1-thread-8
 * 业务逻辑多线程处理,可以按数据集合分片来处理
 * 当前线程名称=pool-1-thread-9
 * 业务逻辑多线程处理,可以按数据集合分片来处理
 * 当前线程名称=pool-1-thread-10
 * 业务逻辑多线程处理,可以按数据集合分片来处理
 * finish
 *
 *
 * 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
 * 用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。
 */
public class CountDownLatchTest {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(10);

        //splitLists 按集合来多线程处理数据
        //通过CountDownLatch 的使用  我们控制了线程的执行顺序
        CountDownLatch countDownLatch = new CountDownLatch(10);

        System.out.println("begin");
        for(int i= 0;i < 10; i++){
//            System.out.println("i=" + i);
            executorService.submit(() -> {
                System.out.println("当前线程名称=" + Thread.currentThread().getName());

                try {
                    //todo
                    System.out.println("业务逻辑多线程处理,可以按数据集合分片来处理");
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    countDownLatch.countDown();
                    System.out.println("countDown-" + Thread.currentThread().getName());
                }
            });
        }

        // 等待所有线程完毕
        try {
            //await() 方法具有阻塞作用
            countDownLatch.await();
            System.out.println("finish");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        //结束
        executorService.shutdown();

    }
}

 

标签:thread,处理,demo,CountDownLatch,线程,分片,多线程,pool
来源: https://www.cnblogs.com/oktokeep/p/16615886.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有