首页 > 其他分享 >集合遍历使用多线程并行执行

集合遍历使用多线程并行执行

时间:2023-08-28 16:35:29浏览次数:40  
标签:map ConcurrentHashMap 遍历 join 并行执行 CompletableFuture new 多线程

在业务中常常有这样的需求,需要遍历集合,分别处理,相互之前单独处理,互不影响。
为了充分利用服务器资源,可以使用多线程来执行。

parallelStream创建一个并行流,
使用ConcurrentHashMap使多线程情况下线程安全
CompletableFuture.allOf是所有线程全部执行完获得结果
CompletableFuture.runAsync没有返回值
CompletableFuture.supplyAsync有返回值

CompletableFuture.get() 和 CompletableFuture.join() 这两个方法是获取异步守护线程的返回值的。
get() 方法会抛出经检查的异常,可被捕获,自定义处理或者直接抛出。而 join() 会抛出未经检查的异常。

ConcurrentHashMap<Integer, Object> map = new ConcurrentHashMap<>();
List<Demo> list = new ArrayList<>();
CompletableFuture.allOf(list.parallelStream()
						.map(d -> CompletableFuture.runAsync(() -> {
							// do something
							map.put(d.getId(), Object);
						}, threadPoolTaskExecutor)).toArray(CompletableFuture[]::new)).join();
// 对最终集合做处理,比如插入
insert(new ArrayList<>(map.values()));

标签:map,ConcurrentHashMap,遍历,join,并行执行,CompletableFuture,new,多线程
From: https://www.cnblogs.com/fchhk-blog/p/17662692.html

相关文章

  • Java多线程-实现 生产者-消费者 模式
    多线程实现生产者消费者,堆积满100后停止生产,消费到小于50后继续生产这是一种写法,但是我觉得不太好:它通过循环创建了很多的线程,每个线程只消费/生产一次它使用notifyAll()通知所有的线程唤醒,包括生产者和消费者,感觉产品数量永远也达不到50publicclassProducerimpleme......
  • 面试官:如何遍历 Redis 中的海量数据?
    来源:https://www.toutiao.com/article/6697540366528152077/前言有时候我们需要知道线上的redis的使用情况,尤其需要知道一些前缀的key值,让我们怎么去查看呢?今天给大家分享一个小知识点!事故产生因为我们的用户token缓存是采用了【user_token:userid】格式的key,保存用户的token......
  • 多线程以rtsp流调用多路海康摄像头的思考
    如题,我使用了多线程,以rtsp流调用多路海康摄像头。使用了opencv作为拉流库,但是结果不如人意。当摄像头数增加时,cpu占用率变化不大,但是却出现了卡顿。当增大到5个时,甚至发生崩溃。我使用了千兆光纤网,显然不是带宽问题。那会不会是imshwo显示久了不更新呢,显然不是。接受速度快于显......
  • 【校招VIP】java语言考点之多线程&NIO
    考点介绍:多线程&NIO考点是校招面试中的常制点之一。JavaNIO是newIO的简称,是一种可以替代Java10的一套新的IO机制。它提供了一套不同于Java标准1O的操作机制,严格来说,NIO与并发并无直接关系,但是使用NIO技术可以大大提高线程的使用效率......答案详情解析和文章内容可扫下方二维......
  • 二叉树层序遍历队列实现
    参考:二叉树的层序遍历(两种方法实现)_askunix_hjh的博客-CSDN博客题解|#求二叉树的层序遍历#_牛客博客(nowcoder.net)题解二:BFS(迭代)主要思路:广度优先8.27用到的思路是广度优先,循环,不是递归......
  • Shell 遍历文件夹
    例11#!/bin/bash2read_dir(){3a=04declare-aarr5forfilein`ls$1`6do7a=$a+18if[-d$1"/"$file]9then10arr[$a]=$1"/"$file11echo$1"/"$file12fi13done1......
  • Linux 多线程基础
    @TOC前言一、多线程基础函数1.pthread_create创建新的线程。#include<pthread.h> intpthread_create(pthread_t*thread,constpthread_attr_t*attr, void*(*start_routine)(void*),void*arg);参数说明:thread:用于存储新线程的ID。attr:线程属......
  • 多线程基础
    进程在计算机中,我们把一个任务称为一个进程,浏览器就是一个进程,视频播放器是另一个进程。某些进程内部还需要同时执行多个子任务。例如,我们在使用Word时,Word可以让我们一边打字,一边进行拼写检查,我们把子任务称为线程。进程和线程的关系:一个进程可以包含一个或多个线程,但至少会有一个......
  • flutter中通过遍历一个数组,给每个元素添加一个开关按钮怎么写
    要通过遍历一个数组给每个元素添加一个开关按钮,你可以使用ListView.builder来构建一个包含开关按钮的列表。下面是一个示例,展示了如何遍历一个数组并为每个元素添加一个开关按钮:List<bool>switchValues=List.generate(5,(index)=>false);ListView.builder(itemCount:sw......
  • 创建多线程继承Thread和实现Runnable以及synchronized的注意事项
    关于创建多线程继承Thread和实现Runnable以及synchronized的注意事项以下是利用多线程模拟购票的代码publicclassSell{publicstaticvoidmain(String[]args){Ticketticket=newTicket();Ticketticket1=newTicket();ticket.star......