首页 > 编程语言 >Java使用多线程池给List赋值导致List存在空的处理

Java使用多线程池给List赋值导致List存在空的处理

时间:2024-08-03 19:16:38浏览次数:14  
标签:executorService Java 示例 List list 多线程

错误示例:

    public List<String> test() throws NuMaxCloudCommonException {
        ExecutorService executorService = Executors.newFixedThreadPool(3);
        List<String> list = new ArrayList<>();
        for (int i = 0; i < 3; i++) {
            Future<?> future = executorService.submit(() -> {
                list.add("a");
            });
        }
        return list;
    }

返回结果:[a],[a,a],[a,a,a]不一定,就是因为线程池使用了非线程安全的列表,所以会出现元素空的情况

正确示例:

public List<String> test() throws NuMaxCloudCommonException {
        ExecutorService executorService = Executors.newFixedThreadPool(3);
        List<String> list = Collections.synchronizedList(new ArrayList<>());
        for (int i = 0; i < 3; i++) {
            Future<?> future = executorService.submit(() -> {
                list.add("a");
            });
        }
        return list;
    }

结果一直是:

[
  "a",
  "a",
  "a"
]

标签:executorService,Java,示例,List,list,多线程
From: https://www.cnblogs.com/beijie/p/18339219

相关文章

  • 计算机Java项目|基于SpringBoot的科研工作量管理系统
    作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企......
  • 计算机Java项目|基于SpringBoot的纺织品企业财务管理系统设计与实现
    作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企......
  • Java中实现文件上传
    目录1、文件上传本地1.1原理1.2如何使用文件上传1.2.1引入文件上传的依赖 1.2.2配置文件上传拦截器 1.2.3完成文件上传的代码2、文件上传oss服务器 2.1为什么需要上传到oss服务器2.2如何使用oss 2.2.1开启oss服务 2.2.2在Java中引入依赖2.2.3查看......
  • Java中跳转语句的学习
    跳转语句目录跳转语句break语句continue语句break语句break语句可用于上一节介绍的while、repeat-while和for循环结构,它的作用是强行退出循环体,不再执行循环体中剩余的语句。在循环体中使用break语句有两种方式:带有标签和不带标签。语法格式如下:break;//不带标签......
  • JavaScript (十七)——JavaScript 声明提升和严格模式
    目录JavaScript声明提升JavaScript初始化不会提升在头部声明你的变量JavaScript严格模式(usestrict)使用"usestrict"指令严格模式声明严格模式的限制JavaScript声明提升JavaScript中,函数及变量的声明都将被提升到函数的最顶部。JavaScript中,变量可以在......
  • JavaScript(十八)——JavaScript 使用误区
    目录赋值运算符应用错误比较运算符常见错误加法与连接注意事项浮点型数据使用注意事项JavaScript字符串分行错误的使用分号语句使用注意事项return使用注意事项数组中使用名字来索引定义数组元素,最后不能添加逗号定义对象,最后不能添加逗号Undefined不是Null程......
  • 【Java】如何定位线上的OOM
    1.概述本章我们主要讲解如何定位线上的OOM的问题。2.OOM原因OOM的原因有很多种,下面举几个列子。2.1一次申请对象过多比如你查询数据库数据,几千万的数据一次查询完毕,然后都放在内存,然后当然会导致OOM了。解决:可以分页查询2.2内存耗尽-未释放比如我们使用数据库连......
  • Java - Stream流
    Stream流的使用结合Lambda表达式简化集合、数组操作获取Stream流对象->使用中间方法处理数据->使用终结方法处理数据调用方式中间方法1.中间方法返回的是新的Stream流,故每个Stream流只能使用一次中间方法,一般使用链式编程2.修改Stream流中数据不会影响原集合或数组......
  • Java中的不同数据类型的方法调用
    数组在Java中,数组是一个基础的数据结构,用来存储固定大小的同类型元素。数组本身在Java中是一个对象,但它的方法比较有限,主要依赖于Java的Arrays类来进行数组操作。排序sort():对整个数组或指定范围的元素进行排序。重载版本支持所有基本类型数组和对象数组。对于对象数组......
  • python用List的内建函数list.sort进行排序
    对List进行排序,Python提供了两个方法方法1用List的内建函数listsort进行排序listsort(func=None,key=None,reverse=False)Python实对List进行排序,Python提供了两个方法方法1.用List的内建函数list.sort进行排序list.sort(func=None,key=None,reverse=False)>>>list=......