我的任務是創建一個程序,其中 3 名協調員將 200 名學生添加到 1 門課程。我正在使用一個線程池,最后打印已注冊該課程的學生編號數組。出于某種原因——在大多數情況下,當我運行 java 主程序時,它確實會向數組中添加 200 名學生——但是!它時不時地分配更少,并告訴我數組大小是 160、170 ...拜托,如果你能看到是什么原因造成的,我希望得到一些幫助。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(); }}import java.util.ArrayList;public class Coordinator implements Runnable{ public static ArrayList<Integer> javaStudents; private int studentNumber; public Coordinator(int studentNum) { studentNumber = studentNum; javaStudents = new ArrayList<Integer>(); } public static synchronized void processCommand(int studentNumber) { javaStudents.add(studentNumber); } @Override public void run() { System.out.println(Thread.currentThread().getName() + " Starting to add student# " + studentNumber + " to Java"); processCommand(studentNumber); System.out.println(Thread.currentThread().getName() +" Ended adding student#" + studentNumber + " to Java"); } public static void print() { for (int i = 0; i < javaStudents.size(); i++) { System.out.println("Student #" +javaStudents.get(i) + " enrolled to Java"); } System.out.println("Array size: " + javaStudents.size()); }}我希望數組大小始終為 200,但在某些運行中它會有所不同......
1 回答

達令說
TA貢獻1821條經驗 獲得超6個贊
構造函數中的這一行Coordinator
是問題所在:
javaStudents = new ArrayList<Integer>()
static
javaStudents
每次Coordinator
構造a 時,您都會覆蓋該字段。刪除此行,并將您的static
字段聲明更改為:
public static ArrayList<Integer> javaStudents = new ArrayList<>();
添加回答
舉報
0/150
提交
取消