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

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

遞增的實例變量不可用于下一個線程

遞增的實例變量不可用于下一個線程

BIG陽 2022-09-22 16:32:15
我對線程非常陌生。因此,如果這是一個非?;镜膯栴},請原諒我的無知?;旧?,我正在嘗試將員工列表寫入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都是對同一對象的引用。


查看完整回答
反對 回復 2022-09-22
  • 1 回答
  • 0 關注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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