论坛首页 Java企业应用论坛

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

浏览 15380 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-10-28  
关并发毛事,难道你多线程公用一个对象???
0 请登录后投票
   发表时间:2011-10-28  
new 一个,最简单
0 请登录后投票
   发表时间:2011-10-28  
kjj 写道
关并发毛事,难道你多线程公用一个对象???


没有共用一个对象,但是后台却出现这种异常,我也挺郁闷的
0 请登录后投票
   发表时间:2011-10-28  
很普通的多线程问题
0 请登录后投票
   发表时间:2011-10-28  
你的rowLine 用AtomicInteger包装一下。
0 请登录后投票
   发表时间:2011-10-28  
sgq0085 写道
longware 写道
gtssgtss 写道
每回new一个


也有一定道理,new多了可能会出现OOM,我的数据库连接,使用spring的bean映射的,不是是否方法作为参数传递

明天试试看。



复议,每次写入单独new一个




要不用下对象池?
0 请登录后投票
   发表时间:2011-10-28  
kangzhengfei 写道
sgq0085 写道
longware 写道
gtssgtss 写道
每回new一个


也有一定道理,new多了可能会出现OOM,我的数据库连接,使用spring的bean映射的,不是是否方法作为参数传递

明天试试看。



复议,每次写入单独new一个




要不用下对象池?

new 有那么容易OOM吗,导出EXCEL本身就很耗内存,这个new根本不算什么,不要没实验就下结论
0 请登录后投票
   发表时间:2011-10-28   最后修改:2011-10-28
这代码也能出同步问题让我对客户单位很忧心
0 请登录后投票
   发表时间:2011-10-28  
longware 写道
只有一个TestExcelExport实例供多线程调用
action里直接调用 doExport(String unitid) 方法

比如,第一次request请求是,正在执行 doExport(12345),还没结束
第二次request又发来了,也在执行 doExport(23456) 方法,
这样,第一次执行里的行号rowLine是30,第二次执行时可能变成25,这样递归方法loopUnitAndWriteExcel()里获取的rowLine可能就不是真实的rowLine

另外,并发时,workbookObj 和sheetObj 也貌似存在冲突,在eclipse里几乎没法手动观察并发的资源

我尝试将workbookObj 、sheetObj 、rowLine作为方法的参数传递,貌似没有成功


为什么不每个请求一个TestExcelExport实例?
0 请登录后投票
   发表时间:2011-10-28  
每个Export new 一个 TestExcelExport 对象!!!如果出现OOM,你得考虑换一个写Excel的方式,拒绝POI,拒绝JXL。用文件流来写,避免创建太多对象,导致OOM。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics