精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-28
关并发毛事,难道你多线程公用一个对象???
|
|
返回顶楼 | |
发表时间:2011-10-28
new 一个,最简单
|
|
返回顶楼 | |
发表时间:2011-10-28
kjj 写道 关并发毛事,难道你多线程公用一个对象???
没有共用一个对象,但是后台却出现这种异常,我也挺郁闷的 |
|
返回顶楼 | |
发表时间:2011-10-28
很普通的多线程问题
|
|
返回顶楼 | |
发表时间:2011-10-28
你的rowLine 用AtomicInteger包装一下。
|
|
返回顶楼 | |
发表时间:2011-10-28
sgq0085 写道 longware 写道 gtssgtss 写道 每回new一个
也有一定道理,new多了可能会出现OOM,我的数据库连接,使用spring的bean映射的,不是是否方法作为参数传递 明天试试看。 复议,每次写入单独new一个 要不用下对象池? |
|
返回顶楼 | |
发表时间:2011-10-28
kangzhengfei 写道 sgq0085 写道 longware 写道 gtssgtss 写道 每回new一个
也有一定道理,new多了可能会出现OOM,我的数据库连接,使用spring的bean映射的,不是是否方法作为参数传递 明天试试看。 复议,每次写入单独new一个 要不用下对象池? new 有那么容易OOM吗,导出EXCEL本身就很耗内存,这个new根本不算什么,不要没实验就下结论 |
|
返回顶楼 | |
发表时间:2011-10-28
最后修改:2011-10-28
这代码也能出同步问题让我对客户单位很忧心
|
|
返回顶楼 | |
发表时间: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实例? |
|
返回顶楼 | |
发表时间:2011-10-28
每个Export new 一个 TestExcelExport 对象!!!如果出现OOM,你得考虑换一个写Excel的方式,拒绝POI,拒绝JXL。用文件流来写,避免创建太多对象,导致OOM。
|
|
返回顶楼 | |