亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何確保線程被完全執行?(使用線程池)

如何確保線程被完全執行?(使用線程池)

千巷貓影 2023-01-05 10:12:53
我的任務是創建一個程序,其中 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<>();


查看完整回答
反對 回復 2023-01-05
  • 1 回答
  • 0 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號