首页 > 其他分享 >CountDownLatch demo演示数据分片多线程处理

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

时间:2022-08-23 14:00:52浏览次数:59  
标签: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
From: https://www.cnblogs.com/oktokeep/p/16615886.html

相关文章

  • Javascript日期、城市选择器(demo)
    1<htmlxmlns="http://www.w3.org/1999/xhtml">2<head>3<title>精美js日期选择器,js省市选择器-何问起</title>4<linktype="text/css"rel="Stylesheet"hre......
  • Java多线程
    1.实现多线程1.1进程和线程【理解】进程:是正在运行的程序​ 是系统进行资源分配和调用的独立单位​ 每一个进程都有它自己的内存空间和系统资源线程:是进程中的单......
  • 浏览器数据库IndexedDB和前端多线程webWorker在3D场景中的实战应用
    背景1.IndexedDB就是浏览器提供的本地数据库,它可以被网页脚本创建和操作。2.在3D场景中模型数据很大,有可能存在数十万级的数据存储,大量数据存储在内存中会很容易导致内......
  • golang 查询 ES 最简单的 demo
    分页多条件查询ESfuncTestESQueryDemo(){//ESSDK教程:https://www.yisu.com/zixun/694102.html query:=elastic.NewBoolQuery().Must......
  • 多线程的爬取
    #导入一个请求的模块importjsonimporttimefromconcurrent.futures.threadimportThreadPoolExecutorfromurllib.parseimporturlencodeimportrequests#图片的名字......
  • 异步和多线程区别
    异步和多线程区别异步和多线程有什么区别其实,异步是目的,而多线程是实现这个目的的方法。异步是说,A发起一个操作后(一般都是比较耗时的操作,如果不耗时的操作就没有必要异步......
  • 控制台C#ATM DEMO
    主要运行结果:代码:1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSystem.IO;6usingSyste......
  • springboot多线程环境下注入bean空指针问题解决
    多线程环境下注入bean会出现空指针了..我是怎么知道这个bean有有没有在启动的时候注入进来的呢?用于指示bean包含在SpringApplication中时应该运行的接口。多个CommandL......
  • 多线程实现生产和消费
    若⼲个⽣产者在⽣产产品,这些产品将提供给若⼲个消费者去消费,为了使⽣产者和消费者能并发执⾏,在两者之间设置⼀个能存储多个产品的缓冲区,⽣产者将⽣产的产品放⼊缓冲区中,消......
  • java多线程
    一、定义很多人应该对进程,线程,程序这几个概念混淆.程序指什么?简而言之,程序就是代码,用不同语言编写的代码;什么是进程?进程就是表示程序一次完整的执行;线程指的是,在......