Java 如何确保线程被完全执行?(使用线程池)

Java 如何确保线程被完全执行?(使用线程池),java,arrays,threadpool,Java,Arrays,Threadpool,我的任务是创建一个项目,其中3名协调员将200名学生添加到一门课程中。我正在使用一个线程池,最后打印注册课程的学生编号数组 出于某种原因——在大多数情况下,当我运行java主程序时,它确实会向数组中添加200个学生——但是!它时不时地分配更少的值,并告诉我数组大小是160170。。。拜托,如果你能知道是什么原因,我希望能得到一些帮助 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors

我的任务是创建一个项目,其中3名协调员将200名学生添加到一门课程中。我正在使用一个线程池,最后打印注册课程的学生编号数组

出于某种原因——在大多数情况下,当我运行java主程序时,它确实会向数组中添加200个学生——但是!它时不时地分配更少的值,并告诉我数组大小是160170。。。拜托,如果你能知道是什么原因,我希望能得到一些帮助

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ClassMain
{
    public static void main(String[] args)
    {
        ExecutorService executor = Executors.newFixedThreadPool(3);

        for (int i = 1; i <= 200 ;i++) {
            Runnable coordinator = new Coordinator(i);
            executor.execute(coordinator);
        }

        executor.shutdown();

        while (!executor.isTerminated());

        Coordinator.print();
    }
}
导入java.util.concurrent.ExecutorService;
导入java.util.concurrent.Executors;
公共类ClassMain
{
公共静态void main(字符串[]args)
{
ExecutorService executor=Executors.newFixedThreadPool(3);

对于(int i=1;i您的
协调器
构造函数中的这一行是问题:

javaStudents = new ArrayList<Integer>()

您的
协调器中的这一行是问题所在:

javaStudents = new ArrayList<Integer>()

您正在混合和匹配
静态
和实例字段。请使用
ExecutorService.awaitShutdown()
。您正在混合和匹配
静态
和实例字段。请使用
ExecutorService.awaitShutdown()
。对此,我深表感谢!)解决了这个问题我对此感激不尽!:)解决了这个问题
public static ArrayList<Integer> javaStudents = new ArrayList<>();