java多线程遇到的回调的问题
今天在用服务器处理excel上传的数据的时候遇到的问题。我的流程是一次读取excel里面900条数据,然后把900条数据保存在数据库中,这个操作完成之后再取下面的900条依次类推。这两步:取数据-存数据是两个线程,其中用一个boolean flag来判断存数据是否完成。
这里就有问题:当我直接while(!flag);和while(!flag){};时这个流程只能走一次,也就是只能取900条。让我在while里面加上打印语句之后就可以完整走完整个流程。
请问诸位这是什么原因导致的?
这里就有问题:当我直接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);
}
}
}
...全文
相关推荐
java接口回调
调用方持有回调接口的引用,并在适当的时候调用接口方法。这种模式在多线程、事件驱动编程、异步处理等场景下都非常有用,能够有效地解决程序中的同步问题,提高程序的响应速度和用户体验。
C++JNI多线程回调java
在多线程环境中,每个线程都有自己的执行上下文,这意味着当C++线程回调Java方法时,必须确保Java的同步机制正确地应用,以避免数据竞争和其他并发问题。
Java多线程回调方法实例解析
Java多线程回调方法实例解析在 Java 编程中,多线程编程是非常重要的一部分,回调方法是多线程编程中的一种常用机制。本文将通过一个实际例子来解释 Java 多线程回调方法的实例解析。
轻松学会JNI层多线程回调java方法
本文将深入探讨如何在JNI层实现多线程回调Java方法,以及如何解决在C/C++层多线程环境下findClass异常的问题。首先,我们需要了解JNI的基本结构。
Java CountDownLatch完成异步回调实例详解
Java CountDownLatch 完成异步回调实例详解Java 中的 CountDownLatch 是一个同步辅助类,允许一个线程等待其他线程完成操作。


