业务系统已开发完毕,正在接受客户的业务测试和性能测试。
业务测试,导出excel没有问题;但是在进行多并发压力测试时,发生了excel文件读写问题,查看代码,主要是类的属性冲突问题,大概代码如下。
package test;
public class TestExcelExport {
private int rowLine = 0;//全局变量,行号
private Object workbookObj = null;//全局变量
private Object sheetObj = null;//全局变量
//synchronized ?? lock ??
public void doExport(String unitid) {
initVar();
writeExcelTableHeader();
loopUnitAndWriteExcel(unitid);
sheetObj = "sheetObj.close()";
workbookObj = "workbookObj.close()";
}
public void initVar() {
rowLine = 0;
workbookObj = "createWorkbook()";
sheetObj = "workbookObj.createSheet(0)";
}
public void writeExcelTableHeader() {
System.out.println("sheetObj.addCell(xxx,yyy)");
}
//synchronized ?? lock ??
//获取机构,并递归下级机构
public void loopUnitAndWriteExcel(String unitid) {
this.rowLine++;
System.out.println("sheetObj.addCell("+unitid+","+rowLine+")");
if (this.rowLine > 65536) {
sheetObj = "workbookObj.createSheet(1)";
}
unitid = "new-value";
loopUnitAndWriteExcel(unitid);
//获取机构人员
System.out.println("sheetObj.addCell(unit_member)");
}
}
写excel文件时,用了类的全局属性,写文件涉及到几行几列定位,全局属性方便,单人操作没有异常;
多并发时,大量线程并发同时调用 doExport() 方法,此时貌似全局属性就乱掉了,行列全乱掉了,甚至写excel都出现空指针。
想到过给doExport() 方法 和 loopUnitAndWriteExcel 方法 加 synchronized 或 lock,加 synchronized 可以跑成功,但是非常慢,貌似出现了线程排队,不满足要求。
加 lock 时,没有发现生效,很奇怪。
像这种多并发引起的资源共享问题,在项目中应该常见的, 请有经验的朋友谈谈。
写excel使用的jxl,貌似还有bug。
分享到:
相关推荐
基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip...
对大数据量的导出excel,用多线程,用倒数计数器对文件进行生成,使用poi,可以支持大数据量的生成,项目中使用的poi是3.1的,上传的是4.1的。
用开源 Apache POI 技术导出Excel,解决导出大数据出现OOM、栈溢出问题,此资源可实现百万级数据多线程分批导出Excel文件,不会内存溢出,生产环境已很稳定的使用者,所以用到的技术很核心、值得参考
轻松解决普通poi形式导出Excel的中出现的栈溢出问题,此资源可实现千万级数据分批导出csv文件,csv大数据量导出(千万级别,不会内存溢出),多线程导出 ,生产环境已经很稳定的使用着
使用qt多线程,通过QAxObject将固定格式的文本文件(demo提供了选择原始文件,暂时使用的模拟数据),导出到excel,实现了进度显示
springboot 导出excel 导入excel 生成excel 内容有点多 springboot 导出excel 导入excel 生成excel 内容有点多 springboot 导出excel 导入excel 生成excel 内容有点多 springboot 导出excel 导入excel 生成excel ...
导出Excel表格 /// 导出Excel /// 创建Excel并写入数据 /// List转化为DataTable /// 转换数据类型
导出Excel功能,导出Excel功能,导出Excel功能,导出Excel功能
使用aspose导出Excel(根据模板导出excel)
该文件用于在项目过程中导出Excel表格
使用poi方式导出excel,支持将多个工作簿合成一个Excel进行导出
Delphi关于导出Excel多分页Sheet的方法,找了很久资料没有找到,自己做了一个。希望以后能用到。
该资源提供关于DevExpress Winform 的所有可打印控件的导出excel 的通用方法,解决GridControl自带方法不能导出图片,多表头无法导出等问题,解决PivotGridControl导出时候自动分组的问题,真正做到所见所得的导出...
QT导出EXCEL,从tableWidget列表获取数据导出到excel文件。导出过程使用了excel模板文件,可以从tableWidget读取固定的几列数据导出到excel文件中。其中excel事先设置好文件格式,后续直接读数写数即可。开发过程...
.net对导出excel是表头的设置,可以跨行与跨列设置表头,以及设置多表头
Delphi DBGrid导出Excel2010
asp.net里导出excel表方法汇总asp.net里导出excel表方法汇总asp.net里导出excel表方法汇总asp.net里导出excel表方法汇总asp.net里导出excel表方法汇总
C#导出excel文件
使用ITEXT导出EXCEL工具类使用ITEXT导出EXCEL工具类使用ITEXT导出EXCEL工具类使用ITEXT导出EXCEL工具类使用ITEXT导出EXCEL工具类
用于考核的系统,导出EXCEL导出EXCEL