我對線程非常陌生。因此,如果這是一個非?;镜膯栴},請原諒我的無知?;旧?,我正在嘗試將員工列表寫入Excel工作簿。因此,在下面的類中,方法只調用一次。而 write 方法從 10 個不同的線程中多次調用。startUp@Componentclass MyEmployeeWriter{priavte int rowNum; // To start with, the rowNum is 0 herepublic void startUp(Employees employee){ // some logic ... this.rowNum++; //now rowNum is 1}public void write(Employees employees){ Sheet sheet = workbook.getSheetAt(0); Row row = sheet.createRow(this.rowCount); //here for all the 10 threads the, rowNum is 1 // Some more logic here... this.rowCount++;}}我面臨的問題是,所有10個線程都是1。遞增的線程不可用于下一個線程。this.rowCountrowCount試用版 1:我使用了行數的關鍵字。這也行不通。volatile試用版 2:我嘗試將行Num更改為,并在其上添加了一個同步塊。這也行不通。Integer(Wrapper class)synchronized(this.rowNum) // I changed rowNum from int to Integer.{ // Some logic here}任何幫助將不勝感激。謝謝。
1 回答

偶然的你
TA貢獻1841條經驗 獲得超3個贊
正確的方法通常是創建一個變量。但是,這聽起來像是你在犯一個不同的錯誤,你實際上有10個“我的職業作家”的實例。AtomicInteger
請注意,您的同步技巧不會做任何事情;整數是不可變的:每次遞增它時,它都是一個不同的實例,并且“synced(X)”與任何其他已同步(Y)沒有任何交互,除非X和Y都是對同一對象的引用。
添加回答
舉報
0/150
提交
取消