当前位置: 首页 > news >正文

多个线程启动 ,等待全部执行完毕再搜集数据

前几天在公司的项目上有个同事使用了多线程统计数据,当时出现了一个用户一直使用服务器首次登录信息作为查询信息。找了半天才发现,线程池资源同步了。后面手动将数据set进去的。

等待线程全部执行完毕,这里使用的是减法计数器,也可而已用加法计数器:CyclicBarrier

package com.quxiao.controller;import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;/*** @program: package1* @author: quxiao* @create: 2023-09-27 15:22**/
public class t3 {static final ExecutorService service = Executors.newFixedThreadPool(10);public static void main(String[] args) throws ExecutionException, InterruptedException {CountDownLatch countDownLatch = new CountDownLatch(4);FutureTask task1 = new FutureTask<>(new t(2, countDownLatch));FutureTask task2 = new FutureTask<>(new t(3, countDownLatch));FutureTask task3 = new FutureTask<>(new t(4, countDownLatch));FutureTask task4 = new FutureTask<>(new t(5, countDownLatch));service.execute(task1);service.execute(task2);service.execute(task3);service.execute(task4);countDownLatch.await();System.out.println(task1.get());System.out.println(task2.get());System.out.println(task3.get());System.out.println(task4.get());
//        service.shutdown();}static class t implements Callable<List<Integer>> {List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);int sum = 0;CountDownLatch countDownLatch;public t(int sum, CountDownLatch countDownLatch) {this.sum = sum;this.countDownLatch = countDownLatch;}@Overridepublic List<Integer> call() throws Exception {TimeUnit.SECONDS.sleep(1L);List<Integer> returnList = list.stream().filter(x -> x >= sum).collect(Collectors.toList());countDownLatch.countDown();return returnList;}}
}

限流操作,限制人数访问,超过预定值就等待:

package com.quxiao.controller;import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;/*** @program: package1* @author: quxiao* @create: 2023-09-27 15:22**/
public class t3 {static final ExecutorService service = Executors.newFixedThreadPool(10);public static void main(String[] args) throws ExecutionException, InterruptedException {Semaphore semaphore = new Semaphore(3);for (int i = 0; i < 9; i++) {final int t = i;new Thread(() -> {try {semaphore.acquire();TimeUnit.SECONDS.sleep(5L);System.out.println(Thread.currentThread().getName() + "进来了");System.out.println(Thread.currentThread().getName() + "出去了");System.out.println();} catch (InterruptedException e) {throw new RuntimeException(e);} finally {semaphore.release();}}, "" + i).start();}}
}
http://www.lryc.cn/news/179992.html

相关文章:

  • 【VIM】VIm-plug插件
  • ssl证书 阿里的域名,腾讯云的证书
  • 力扣算法题:34、在排序数组中查找元素的第一个和最后一个位置.java版
  • [网鼎杯 2020 朱雀组]Nmap
  • 【Leetcode】166.分数到小数
  • 2023-10-01 LeetCode每日一题(买卖股票的最佳时机)
  • 解决 ARouter 无法生成路由表,Toast提示 找不到目标路由
  • 排序算法之【希尔排序】
  • 防火墙基础之H3C防火墙分支与分支之间双向地址转换
  • 【考研数学】概率论与数理统计 —— 第三章 | 二维随机变量及其分布(1,二维连续型和离散型随机变量基本概念与性质)
  • cesium 雷达扫描 (波纹线性雷达扫描效果)
  • SLAM从入门到精通(tf的使用)
  • python代码混淆与代码打包
  • Codeforces Round 899 (Div. 2)
  • 【 SuperPoint 】图像特征提取上的对比实验
  • Chrome获取RequestId
  • cesium 雷达扫描 (线行扩散效果)
  • 【React】React组件生命周期以及触发顺序(部分与vue做比较)
  • 【C++】多线程的学习笔记——白话文版(bushi
  • 图像处理: ImageKit.NET 3.0.10704 Crack
  • K8S内容分发网络之集群,nginx,负载均衡,防火墙
  • 不愧是疑问解决神器!你强任你强
  • 盛最多水的容器 接雨水【基础算法精讲 02】
  • WordPress主题开发( 十二)之—— 主题的functions.php
  • 代码的工厂模式
  • UE5.1编辑器拓展【一、脚本化资产行为,通知,弹窗,高效复制多个同样的资产】
  • mac openssl 版本到底怎么回事 已解决
  • AWS】在EC2上创建root用户,并使用root用户登录
  • 9月24日回顾
  • Spring注册Bean系列--方法1:@Component