为了账号安全,请及时绑定邮箱和手机立即绑定

递增的实例变量不可用于下一个线程

递增的实例变量不可用于下一个线程

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 关注
  • 69 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信