业务系统已开发完毕,正在接受客户的业务测试和性能测试。
业务测试,导出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。
分享到:
相关推荐
本项目“poi多线程大数据导出excel文件”提供了一个解决方案,利用多线程来提高Excel的大数据导出效率。 Apache POI 3.1版本是较早的版本,而项目中使用了更新的4.1版本,这意味着它可能利用了更多优化和新特性。在...
3. **并发控制**:在并发环境中,多个线程同时处理Excel操作可能导致资源竞争。适当的并发控制策略,如线程池或者互斥锁,可以防止资源过度消耗和数据冲突。 4. **使用高效库**:选择合适的库(如Apache POI、...
7. **并发与多线程**:如果服务需要处理多个导出请求,还需要考虑并发控制和多线程安全,以防止资源冲突。 8. **测试与调试**:在开发过程中,单元测试和集成测试能够确保代码的正确性。使用模拟数据和断言可以帮助...
如果应用需要并行处理多个Excel文件,util类还应考虑线程安全问题,防止并发访问引起的资源冲突。 10. **测试与文档**: 对于这样的util类,充分的单元测试和详细的使用文档是必不可少的,以确保正确性和易用性。...
如果处理的Excel文件非常大,可以考虑使用多线程或并行流来加速数据读取和入库过程,但需注意并发控制,防止数据冲突。 通过以上步骤,我们可以高效地使用Java读取Excel文件并将其批量导入到数据库。在实际项目中...
9. **线程安全**:在多线程环境下,需注意并发访问Excel文件时可能出现的问题,如文件锁、数据一致性等。 10. **用户体验**:在用户界面设计上,提供进度条或通知,让用户了解导出进度,提高用户体验。 通过学习和...
6. **并发和多线程**:如果在服务器环境中操作Excel,可能需要考虑并发读写的问题。确保对Excel文件的操作是线程安全的,或者使用队列处理任务,以防止冲突。 7. **性能优化**:为了提高性能,可以考虑将数据批量...
8. **线程安全**:在多线程环境中,工具类可能需要确保其方法是线程安全的,避免并发访问时的冲突。 9. **单元测试**:为了保证功能的正确性,ExcelUtil可能有对应的测试类,模拟各种输入情况来验证其功能。 掌握...
由于`Microsoft.Office.Interop.Excel`不是线程安全的,多用户同时访问可能导致问题,此时可以考虑异步处理或使用临时文件来避免并发冲突。 总结起来,解决C#中因Excel版本不同引起的报错,可以采用以下策略: - ...
7. **并发与多线程**:如果需要在多线程环境中读写Excel,需要注意文件锁定和并发控制问题,以防止数据冲突和文件损坏。 8. **兼容性**:设计时应考虑不同版本的Excel文件兼容性,确保代码不仅能处理最新的XLSX格式...
为了解决这个问题,可以使用多线程技术,特别是后台线程或者任务来执行耗时操作,如数据库导出。本篇文章将详细介绍如何利用VB.NET实现数据库导出并在后台线程中进行,避免UI卡顿。 1. **多线程基础** - **线程**...
8. **并发和多线程**:在多用户环境中,必须考虑并发访问Excel文件的问题。通常,使用单例模式或线程锁定来防止数据冲突。 9. **导出和导入数据**:C#可以方便地将数据从数据库或其他来源导入到Excel,反之亦然。...
6. **多线程处理**:如果文件太大,可以考虑将文件分割成多个部分,然后使用多线程并发读取,以提高整体处理效率。但要注意线程安全问题,避免数据冲突。 7. **数据库存储**:如果需要长期保存和快速访问大量数据,...
6. **多线程支持**:在多线程环境中,`myxls`可以通过合理的同步机制确保数据的一致性和安全性,避免并发访问带来的冲突。 7. **扩展性**:`myxls`的源代码设计允许开发者根据需要进行定制和扩展,例如添加自定义...
9. **并发和多线程**: 如果你的应用需要同时处理多个Excel文件,了解如何在多线程环境中正确使用库以防止数据冲突是至关重要的。 通过以上知识点的学习和实践,你就可以在.NET环境中创建一个能够读取和编辑Excel ...
9. **并发处理**:在多线程环境中,要注意对Excel文件的并发访问控制,以避免数据冲突。 10. **模板应用**:有时我们会使用预定义的Excel模板,通过填充数据生成报告。可以先加载模板,然后替换指定单元格的数据。 ...
- **并发和多线程**:如果库支持并发操作,开发者需要理解如何在多线程环境中安全地使用NativeExcel,避免数据冲突和竞态条件。 综上所述,NativeExcel3.1.0FS.7z是一个专为Delphi开发者设计的处理Excel文件的库,...
- 多线程处理:对于大型数据集,可以考虑使用多线程技术来并发读写Excel文件,提高程序运行速度。 4. **注意事项**: - 文件锁:在读写过程中,需要处理文件锁定问题,以防止多个进程同时访问导致数据冲突。 - ...
9. **并发与多线程**:在多用户环境下,需要考虑并发控制,防止多个用户同时修改同一份Excel文件导致数据冲突。 10. **文件版本兼容性**:选择合适的库要考虑兼容不同版本的Excel文件,如97-2003的.xls和2007以后的...
7. **并发处理**:在多线程环境下,可能需要考虑线程安全问题,以避免数据冲突。 8. **模板设计**:如果支持自定义导出内容,那么可能包含模板设计功能,允许用户预定义Excel的布局和样式。 9. **单元格格式化**:...