java多线程遇到的回调的问题

口口口S口口口 口口口S口口口 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
今天在用服务器处理excel上传的数据的时候遇到的问题。我的流程是一次读取excel里面900条数据,然后把900条数据保存在数据库中,这个操作完成之后再取下面的900条依次类推。这两步:取数据-存数据是两个线程,其中用一个boolean flag来判断存数据是否完成。
这里就有问题:当我直接while(!flag);和while(!flag){};时这个流程只能走一次,也就是只能取900条。让我在while里面加上打印语句之后就可以完整走完整个流程。
请问诸位这是什么原因导致的?

class saveDataClass implements Runnable {

private String tableName;//表名
private List<String> columnsTitle;//标题
private ExcelRead er;//自己写的excel对象
private boolean flag;

public saveDataClass(String tableName, List<String> columnsTitle,
ExcelRead er) {
this.tableName = tableName;
this.columnsTitle = columnsTitle;
this.er = er;
this.flag = false;
}

@Override
public void run() {
int start = 1;
int size = 900;
int sheetRowNum = er.getRowNum();//页的行数

int count = sheetRowNum / 900;
if (sheetRowNum % 900 > 0) {
count++;
}
for (int i = 0; i < count; i++) {
int end = start + size;
List<String[]> list = er.readExcelByRowAndDelete(start, end);//获取一段excel中的数据
Thread thread = new Thread(new MyThread(columnsTitle, list, tableName));//开始存数据
thread.start();
start = end;
while(!flag) {
//logger.debug("");这里就有问题,加上打印语句就可以,不加就不行
}
addFlag(false);
}
}

public synchronized void addFlag(boolean flag) {
this.flag = flag;
}

/**
* 进行数据插入的并发类
* @implements Runnable
* @author zcx
*
*/
class MyThread implements Runnable {

List<String> columns;
List<String[]> data;
String tableName;

public MyThread(List<String> columns, List<String[]> data,
String tableName) {
this.columns = columns;
this.data = data;
this.tableName = tableName;
}

@Override
public void run() {
/**
* 数据存入数据库
**/
addFlag(true);
}

}

}
...全文

相关推荐

评论 3
收藏 已收藏
分享
返回顶部
口口口S口口口
Java EE 67,535 成员 225,843 内容