`
longware
  • 浏览: 162346 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

“导出excel”压力测试多并发引起的多线程冲突问题

阅读更多
业务系统已开发完毕,正在接受客户的业务测试和性能测试。
业务测试,导出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。
分享到:
评论
1 楼 ae6623 2015-06-09  
TestExcelExport 每次都new一下。

相关推荐

    poi多线程大数据导出excel文件.zip

    本项目“poi多线程大数据导出excel文件”提供了一个解决方案,利用多线程来提高Excel的大数据导出效率。 Apache POI 3.1版本是较早的版本,而项目中使用了更新的4.1版本,这意味着它可能利用了更多优化和新特性。在...

    excel导入导出性能优化

    3. **并发控制**:在并发环境中,多个线程同时处理Excel操作可能导致资源竞争。适当的并发控制策略,如线程池或者互斥锁,可以防止资源过度消耗和数据冲突。 4. **使用高效库**:选择合适的库(如Apache POI、...

    导出到Excel

    7. **并发与多线程**:如果服务需要处理多个导出请求,还需要考虑并发控制和多线程安全,以防止资源冲突。 8. **测试与调试**:在开发过程中,单元测试和集成测试能够确保代码的正确性。使用模拟数据和断言可以帮助...

    Excel 报表导入导出 util

    如果应用需要并行处理多个Excel文件,util类还应考虑线程安全问题,防止并发访问引起的资源冲突。 10. **测试与文档**: 对于这样的util类,充分的单元测试和详细的使用文档是必不可少的,以确保正确性和易用性。...

    excel文件读取API

    如果处理的Excel文件非常大,可以考虑使用多线程或并行流来加速数据读取和入库过程,但需注意并发控制,防止数据冲突。 通过以上步骤,我们可以高效地使用Java读取Excel文件并将其批量导入到数据库。在实际项目中...

    C#实现几十万级数据导出 实 Excel及Excel各种操作实例.zip

    9. **线程安全**:在多线程环境下,需注意并发访问Excel文件时可能出现的问题,如文件锁、数据一致性等。 10. **用户体验**:在用户界面设计上,提供进度条或通知,让用户了解导出进度,提高用户体验。 通过学习和...

    c#操作excel 导入导出 还有计算

    6. **并发和多线程**:如果在服务器环境中操作Excel,可能需要考虑并发读写的问题。确保对Excel文件的操作是线程安全的,或者使用队列处理任务,以防止冲突。 7. **性能优化**:为了提高性能,可以考虑将数据批量...

    Excel导入导出工具类

    8. **线程安全**:在多线程环境中,工具类可能需要确保其方法是线程安全的,避免并发访问时的冲突。 9. **单元测试**:为了保证功能的正确性,ExcelUtil可能有对应的测试类,模拟各种输入情况来验证其功能。 掌握...

    c# ExcelHelper.cs和excel的dll解决excel版本不同引起的报错

    由于`Microsoft.Office.Interop.Excel`不是线程安全的,多用户同时访问可能导致问题,此时可以考虑异步处理或使用临时文件来避免并发冲突。 总结起来,解决C#中因Excel版本不同引起的报错,可以采用以下策略: - ...

    Excel_excel_

    7. **并发与多线程**:如果需要在多线程环境中读写Excel,需要注意文件锁定和并发控制问题,以防止数据冲突和文件损坏。 8. **兼容性**:设计时应考虑不同版本的Excel文件兼容性,确保代码不仅能处理最新的XLSX格式...

    用vb.net线程实现数据库导出资料,大数据不会出现白屏现象

    为了解决这个问题,可以使用多线程技术,特别是后台线程或者任务来执行耗时操作,如数据库导出。本篇文章将详细介绍如何利用VB.NET实现数据库导出并在后台线程中进行,避免UI卡顿。 1. **多线程基础** - **线程**...

    C#联合excel编程

    8. **并发和多线程**:在多用户环境中,必须考虑并发访问Excel文件的问题。通常,使用单例模式或线程锁定来防止数据冲突。 9. **导出和导入数据**:C#可以方便地将数据从数据库或其他来源导入到Excel,反之亦然。...

    java读取数据量大的excel文件(2003及2007)

    6. **多线程处理**:如果文件太大,可以考虑将文件分割成多个部分,然后使用多线程并发读取,以提高整体处理效率。但要注意线程安全问题,避免数据冲突。 7. **数据库存储**:如果需要长期保存和快速访问大量数据,...

    Excel 操作 类库

    6. **多线程支持**:在多线程环境中,`myxls`可以通过合理的同步机制确保数据的一致性和安全性,避免并发访问带来的冲突。 7. **扩展性**:`myxls`的源代码设计允许开发者根据需要进行定制和扩展,例如添加自定义...

    在.net读取并编辑excel 2003

    9. **并发和多线程**: 如果你的应用需要同时处理多个Excel文件,了解如何在多线程环境中正确使用库以防止数据冲突是至关重要的。 通过以上知识点的学习和实践,你就可以在.NET环境中创建一个能够读取和编辑Excel ...

    execl导入导出工具类_execl_

    9. **并发处理**:在多线程环境中,要注意对Excel文件的并发访问控制,以避免数据冲突。 10. **模板应用**:有时我们会使用预定义的Excel模板,通过填充数据生成报告。可以先加载模板,然后替换指定单元格的数据。 ...

    NativeExcel3.1.0FS.7z

    - **并发和多线程**:如果库支持并发操作,开发者需要理解如何在多线程环境中安全地使用NativeExcel,避免数据冲突和竞态条件。 综上所述,NativeExcel3.1.0FS.7z是一个专为Delphi开发者设计的处理Excel文件的库,...

    excel 读写操作 .rar

    - 多线程处理:对于大型数据集,可以考虑使用多线程技术来并发读写Excel文件,提高程序运行速度。 4. **注意事项**: - 文件锁:在读写过程中,需要处理文件锁定问题,以防止多个进程同时访问导致数据冲突。 - ...

    c#操作excel

    9. **并发与多线程**:在多用户环境下,需要考虑并发控制,防止多个用户同时修改同一份Excel文件导致数据冲突。 10. **文件版本兼容性**:选择合适的库要考虑兼容不同版本的Excel文件,如97-2003的.xls和2007以后的...

    excel文件解析jar包

    7. **并发处理**:在多线程环境下,可能需要考虑线程安全问题,以避免数据冲突。 8. **模板设计**:如果支持自定义导出内容,那么可能包含模板设计功能,允许用户预定义Excel的布局和样式。 9. **单元格格式化**:...

Global site tag (gtag.js) - Google Analytics