我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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循环内执行多线程问题怎么解决”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

    下载Word文档

    猜你喜欢

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

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

    java for循环内执行多线程问题

    这篇文章主要介绍了java for循环内执行多线程问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-10

    java之使用多线程代替for循环(解决主线程提前结束问题)

    这篇文章主要介绍了java之使用多线程代替for循环(解决主线程提前结束问题),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-10

    java嵌套for循环大小问题怎么解决

    在解决Java嵌套for循环大小问题时,可以考虑以下几种方法:1. 使用不同的循环变量:在嵌套循环中使用不同的循环变量,确保内外两层循环的变量不会发生冲突。例如:```javafor (int i = 0; i for (int j = 0
    2023-09-13

    arduino无线循环问题怎么解决

    要解决Arduino无线循环问题,可以考虑以下几个方面:1. 检查代码逻辑:仔细检查代码中的循环语句,确保没有出现无限循环的情况。如果有,可以通过添加退出条件或修改循环逻辑来解决。2. 调试输出:使用Serial.print()或Seria
    2023-08-20

    Java调度线程池ScheduledThreadPoolExecutor不执行问题怎么解决

    本篇内容主要讲解“Java调度线程池ScheduledThreadPoolExecutor不执行问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java调度线程池ScheduledTh
    2023-07-05

    Java循环内的回调函数问题怎么解决

    本篇内容介绍了“Java循环内的回调函数问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题出现在循环体内的回调函数,用一个很简单
    2023-06-04

    Java循环引用问题怎么解决

    在Java中,循环引用问题通常是指两个或多个对象相互引用,导致无法被垃圾回收器回收,从而造成内存泄漏的情况。要解决循环引用问题,可以使用以下几种方法:1. 调整对象之间的引用关系:当两个对象相互引用时,可以将其中一个对象的引用改为弱引用或软
    2023-10-07

    Java多线程之线程安全问题怎么解决

    本篇内容主要讲解“Java多线程之线程安全问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java多线程之线程安全问题怎么解决”吧!1.线程安全概述1.1什么是线程安全问题首先我们需要
    2023-06-30

    Java多线程死锁问题怎么解决

    解决Java多线程死锁问题的常用方法有以下几种:1. 避免使用多个锁:尽量减少使用多个锁来降低出现死锁的概率。2. 按照固定的顺序获取锁:对于多个锁的获取,确保线程按照固定的顺序获取锁,避免出现循环等待的情况。3. 设置超时时间:在获取锁的
    2023-09-22

    SpringBoot中的Scheduled单线程执行问题怎么解决

    本篇内容主要讲解“SpringBoot中的Scheduled单线程执行问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot中的Scheduled单线程执行问题怎么解决”
    2023-07-02

    for循环内线程池并发执行任务,等到子线程全部处理完任务,主线程在执行java的实现方式

    for循环内线程池并发执行任务,等到子线程全部处理完任务,主线程在执行 方式一 使用 CountDownLatch 在 Java 中,您可以使用 CountDownLatch 来实现主线程等待子线程执行完成的功能。CountDownLatc
    2023-08-23

    java中怎么利用lambda解决foreach循环问题

    本篇文章给大家分享的是有关java中怎么利用lambda解决foreach循环问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、以前我们使用的for循环/** *
    2023-06-20

    java异步线程不执行怎么解决

    如果Java异步线程不执行,可以尝试以下几种解决方法:1. 检查线程是否正确创建和启动:确保创建了一个Thread对象并调用了start()方法来启动线程。2. 检查线程的逻辑是否正确:确保线程的run()方法中有需要执行的代码逻辑。可以在
    2023-08-31

    Linux多线程及多线程并发访问同一块内存的问题怎么解决

    这篇文章主要介绍了Linux多线程及多线程并发访问同一块内存的问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux多线程及多线程并发访问同一块内存的问题怎么解决文章都会有所收获,下面我们一起来看
    2023-07-05

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录