广告
返回顶部
首页 > 资讯 > 精选 >java for循环内执行多线程问题怎么解决
  • 228
分享到

java for循环内执行多线程问题怎么解决

2023-07-05 10:07:36 228人浏览 薄情痞子
摘要

这篇文章主要介绍了java for循环内执行多线程问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java for循环内执行多线程问题怎么解决文章都会有所收获,下面我们一起来看看吧

这篇文章主要介绍了java for循环内执行多线程问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java for循环内执行多线程问题怎么解决文章都会有所收获,下面我们一起来看看吧。

    java用多线程来加快循环效率

    线程池搭配闭

    涉及知识:Executors(线程池)、CountDownLatch(闭锁)

    优点:代码简洁,方便阅读,性能稳定;

    缺点:Executors创建的线程池是公用的,如果多个地方使用这种循环多线程的方式,就会抢夺线程池资源,这样运行速度也会降低;

    import java.util.*;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors; public class test{         private static final ExecutorService executor = Executors.newFixedThreadPool(5);        public static void main(String[] args) throws Exception {                        // 初始化数据        List<Map<String,Object>> list = new ArrayList<>();        for(int i=0;i<50;i++){            Map<String,Object> object = new HashMap<>();            object.put("index",i);            list.add(object);        }         // 初始化计时器        CountDownLatch cdl = new CountDownLatch(list.size());        System.out.println("====== 线程开始 =====");         // 遍历        for(Map<String,Object> object:list){            // 开启线程            executor.submit(new Runnable() {                @Override                public void run() {                    try {                        Thread t = Thread.currentThread();                        String name = t.getName();                        // 模拟运行耗时                        Thread.sleep(500);                        System.out.println(name+":执行到"+object.get("index"));                        object.put("status","已经执行过");                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                    // 闭锁-1                    cdl.countDown();                }            });        }                // 调用闭锁的await()方法,该线程会被挂起,它会等待直到count值为0才继续执行        // 这样我们就能确保上面多线程都执行完了才走后续代码        cdl.await();                //关闭线程池        executor.shutdown();        System.out.println("====== 线程结束 =====");         // 校验多线程正确性        for(Map<String,Object> object:list){            System.out.println(object.get("index") + ":" + object.get("status"));        }     }}

    for循环中使用多线程

    每个service负责一个业务,多次进行重复业务就要使用到for循环,例如对某个存储id的集合遍历,并为每个id创建一些东西。

    但是使用单线程执行任务会因为等待上次任务执行完而浪费很多时间,并且一旦某次执行报错,任务就会停止执行,明显不符合我们的要求。

    这种情况就在for循环中使用多线程。

    import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadPoolExecutor; public class Test {         private static final ThreadPoolExecutor EXECUTOR = new ThreadPoolExecutor(2, 4, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(60000));     public static void main(String[] args) {        //自己的数组或集合,这里不再进行填充        String[] ids = new String[10]                for (String id : ids) {            EXECUTOR.execute(new Runnable() {                @Override                public void run() {                    try {                        //需要执行的业务逻辑                        System.out.println("业务逻辑正在执行");                    } catch (Exception e) {                        //todo                    }                }            });        }    } }

    关于“java for循环内执行多线程问题怎么解决”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“java for循环内执行多线程问题怎么解决”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

    --结束END--

    本文标题: java for循环内执行多线程问题怎么解决

    本文链接: https://www.lsjlt.com/news/351257.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • java for循环内执行多线程问题怎么解决
      这篇文章主要介绍了java for循环内执行多线程问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java for循环内执行多线程问题怎么解决文章都会有所收获,下面我们一起来看看吧...
      99+
      2023-07-05
    • java for循环内执行多线程问题
      目录java用多线程来加快循环效率线程池搭配闭锁for循环中使用多线程总结java用多线程来加快循环效率 线程池搭配闭锁 涉及知识:Executors(线程池)、CountDownL...
      99+
      2023-03-10
      java for循环 java多线程 java for循环多线程
    • c# for循环中创建线程执行问题
      先执行以一个简单的示例: static void Main(string[] args) { List<int> taskConsumes =...
      99+
      2022-11-12
    • 多线程如何解决for循环效率的问题
      多线程解决for循环效率问题 在for里面,如果执行一次for里面的内容所需时间比较长,可以使用线程池来提高for循环的效率 public class TreadFor { pr...
      99+
      2022-11-12
    • java之使用多线程代替for循环(解决主线程提前结束问题)
      目录CountDownLatch常用方法使用案例应用场景场景1:模拟并发场景2:多个线程完成后,进行汇总合并接下来进入正题总结在使用之前先介绍一个并发需要用到的方法: CountDo...
      99+
      2023-03-10
      java使用多线程 java for循环 java主线程
    • java嵌套for循环大小问题怎么解决
      在解决Java嵌套for循环大小问题时,可以考虑以下几种方法:1. 使用不同的循环变量:在嵌套循环中使用不同的循环变量,确保内外两层...
      99+
      2023-09-13
      java
    • arduino无线循环问题怎么解决
      要解决Arduino无线循环问题,可以考虑以下几个方面:1. 检查代码逻辑:仔细检查代码中的循环语句,确保没有出现无限循环的情况。如...
      99+
      2023-08-20
      arduino
    • Java循环内的回调函数问题怎么解决
      本篇内容介绍了“Java循环内的回调函数问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题出现在循环体内的回调函数,用一个很简单...
      99+
      2023-06-04
    • Java循环引用问题怎么解决
      在Java中,循环引用问题通常是指两个或多个对象相互引用,导致无法被垃圾回收器回收,从而造成内存泄漏的情况。要解决循环引用问题,可以...
      99+
      2023-10-07
      Java
    • Java调度线程池ScheduledThreadPoolExecutor不执行问题怎么解决
      本篇内容主要讲解“Java调度线程池ScheduledThreadPoolExecutor不执行问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java调度线程池ScheduledTh...
      99+
      2023-07-05
    • Java多线程死锁问题怎么解决
      解决Java多线程死锁问题的常用方法有以下几种:1. 避免使用多个锁:尽量减少使用多个锁来降低出现死锁的概率。2. 按照固定的顺序获...
      99+
      2023-09-22
      Java
    • Java多线程之线程安全问题怎么解决
      本篇内容主要讲解“Java多线程之线程安全问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java多线程之线程安全问题怎么解决”吧!1.线程安全概述1.1什么是线程安全问题首先我们需要...
      99+
      2023-06-30
    • SpringBoot中的Scheduled单线程执行问题怎么解决
      本篇内容主要讲解“SpringBoot中的Scheduled单线程执行问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot中的Scheduled单线程执行问题怎么解决”...
      99+
      2023-07-02
    • for循环内线程池并发执行任务,等到子线程全部处理完任务,主线程在执行java的实现方式
      for循环内线程池并发执行任务,等到子线程全部处理完任务,主线程在执行 方式一 使用 CountDownLatch 在 Java 中,您可以使用 CountDownLatch 来实现主线程等待子线程执行完成的功能。CountDownLatc...
      99+
      2023-08-23
      多线程 线程池 线程调用顺序
    • java中怎么利用lambda解决foreach循环问题
      本篇文章给大家分享的是有关java中怎么利用lambda解决foreach循环问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、以前我们使用的for循环 &nbs...
      99+
      2023-06-20
    • MySQL游标多循环一次的问题怎么解决
      这篇文章主要讲解了“MySQL游标多循环一次的问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL游标多循环一次的问题怎么解决”吧! ...
      99+
      2022-10-18
    • R语言多线程运算操作(解决R循环慢的问题)
      已经大半年没有更新博客了。。最近都跑去写分析报告半年没有R 这次记录下关于R循环(百万级以上)死慢死慢的问题,这个问题去年就碰到过,当时也尝试过多线程,but failed........
      99+
      2022-11-12
    • java中lambda(函数式编程)一行解决foreach循环问题
      java lambda(函数式编程)一行解决foreach循环 首先给大家推荐《精通lambda表达式:java多核编程》 这本书详细介绍了lambda表达式从入门到理解、应用 下面...
      99+
      2022-11-12
    • java异步线程不执行怎么解决
      如果Java异步线程不执行,可以尝试以下几种解决方法:1. 检查线程是否正确创建和启动:确保创建了一个Thread对象并调用了sta...
      99+
      2023-08-31
      java
    • Linux多线程及多线程并发访问同一块内存的问题怎么解决
      这篇文章主要介绍了Linux多线程及多线程并发访问同一块内存的问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux多线程及多线程并发访问同一块内存的问题怎么解决文章都会有所收获,下面我们一起来看...
      99+
      2023-07-05
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作