Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向同步ArrayList添加对象的多线程方法_Java_Arrays_Multithreading_Synchronization - Fatal编程技术网

Java 向同步ArrayList添加对象的多线程方法

Java 向同步ArrayList添加对象的多线程方法,java,arrays,multithreading,synchronization,Java,Arrays,Multithreading,Synchronization,我的程序有问题。在循环中,我使用多线程(这是我练习的前提)创建了一个新的Employes(通过从假名字生成器网站下载数据来自动创建),如果线程完成创建Employee对象,我应该将其添加到同步列表中,但出现了一些问题,列表为空。我卡住了。有人知道怎么回事吗 import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import jav

我的程序有问题。在循环中,我使用多线程(这是我练习的前提)创建了一个新的Employes(通过从假名字生成器网站下载数据来自动创建),如果线程完成创建Employee对象,我应该将其添加到同步列表中,但出现了一些问题,列表为空。我卡住了。有人知道怎么回事吗

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) throws Exception {
        final String[][] e = new String[1][1];
        EmployeesGenerator a=new EmployeesGenerator();
        List<Employees> list= Collections.synchronizedList(new ArrayList<>());
        ExecutorService executorService= Executors.newFixedThreadPool(10);

       for(int x=0; x<10;x++){
           executorService.submit(()->{
                       try {
                           e[0] =a.getEmployees();
                       } catch (Exception ex) {
                           ex.printStackTrace();
                       }
                       list.add(new Employees(e[0][0], e[0][1], e[0][2], e[0][3], e[0][4]));
                        }
                   );
       }
       executorService.shutdown();

        System.out.println(list.size());
    }
}
import java.io.IOException;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.Collections;
导入java.util.List;
导入java.util.concurrent.ExecutorService;
导入java.util.concurrent.Executors;
导入java.util.stream.stream;
公共班机{
公共静态void main(字符串[]args)引发异常{
最终字符串[][]e=新字符串[1][1];
EmployeesGenerator a=新的EmployeesGenerator();
List List=Collections.synchronizedList(新的ArrayList());
ExecutorService ExecutorService=Executors.newFixedThreadPool(10);
对于(int x=0;x{
试一试{
e[0]=a.getEmployees();
}捕获(例外情况除外){
例如printStackTrace();
}
名单.增补(新雇员(e[0][0],e[0][1],e[0][2],e[0][3],e[0][4]);;
}
);
}
executorService.shutdown();
System.out.println(list.size());
}
}

您应该在Executor服务关闭后等待线程终止:

try {
        executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
    } catch (InterruptedException e) {
    }
    System.out.println(list.size());