zoukankan      html  css  js  c++  java
  • “导出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。
  • 相关阅读:
    修改注册表启动项
    修改IP和DNS的dos命令
    屏蔽windows快捷键的方法
    本地IP,掩码,网关,DNS设置
    DevExpress的提示框
    ASP.NET如何批量保存动态生成的文本框?
    [转]SQL Server 安全性概論與無法刪除資料庫使用者的解決辦法
    如何用C#对Gridview的项目进行汇总统计?
    如何用javasript对Gridview的项目进行汇总统计?
    [转]C#如何获取客户端IP地址
  • 原文地址:https://www.cnblogs.com/longware/p/13382231.html
Copyright © 2011-2022 走看看