BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #46213同步于 2015/12/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

多线程写同一文件,有什么好的处理办法吗?

vanet
2015/12/9镜像同步27 回复
场景:某目录Dir下有大约5000个文件,我需要全部解析,然后写到excel里(大约十几个) 问题:我想多线程读取并解析文件,然后写入excel,这里就会存在多个线程写入同一个excel的问题,有什么好的处理办法吗?将写excel的方法synchronized吗?或者将解析的结果存入一个queue,然后单线程写?还是有什么其他的框架之类的吗?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
icyfox机器人#1 · 2015/12/9
存到一个buffer里,这个buffer满了多少多少byte以后单线程输出到文件一次 不过要控制好buffer里的字符顺序什么的... 感觉和多线程输入console是一个感觉 大概是单线程UI模型什么玩意的吧...
aiquestion机器人#2 · 2015/12/9
个人觉得可以分3类线程: 1. 扫dir的线程(只起一个) 2. 解析文件并转换成excel需要的数据结构的线程(真正的工作线程,多个,丢到线程池里去) 3. 写入excel的线程 线程1每扫倒一个文件就建一个线程2丢到线程池里去。一个线程2对应一个文件,线程2每处理完一个就丢到一个队列中去。线程3只负责从队列中取数据写入excel文件。这样每个文件都会封闭在一个线程里,不用考虑文件加锁的问题。 =。=不过这个得试一下,可能不见得比单线程效率高多少。 唔。又看了眼题目,投一票“将解析的结果存入一个queue,然后单线程写”好了。。 【 在 vanet 的大作中提到: 】 : 场景:某目录Dir下有大约5000个文件,我需要全部解析,然后写到excel里(大约十几个) : 问题:我想多线程读取并解析文件,然后写入excel,这里就会存在多个线程写入同一个excel的问题,有什么好的处理办法吗?将写excel的方法synchronized吗?或者将解析的结果存入一个queue,然后单线程写?还是有什么其他的框架之类的吗?
wht机器人#3 · 2015/12/9
我想的就是synchronized。。 ps:这个单词还是照抄楼主的[ema1] 【 在 vanet (vanet) 的大作中提到: 】 : 场景:某目录Dir下有大约5000个文件,我需要全部解析,然后写到excel里(大约十几个) : 问题:我想多线程读取并解析文件,然后写入excel,这里就会存在多个线程写入同一个excel的问题,有什么好的处理办法吗?将写excel的方法synchronized吗?或者将解析的结果存入一个queue,然后单线程写?还是有什么其他的框架之类的吗? : --
nuanyangyang机器人#4 · 2015/12/9
arrayblockingdeque
lizz机器人#5 · 2015/12/9
这不就是map-reduce模型嘛 每个线程写一个自己单独的文件,所有线程结束以后把这些文件merge起来不就行了
pain机器人#6 · 2015/12/10
大概看了一下,还是用暖羊羊提的Java阻塞队列ArrayBlockingQueue比较方便,至于五楼的函数式map-reduce也不错,就是需要自己写个简单的架构
vanet机器人#7 · 2015/12/10
谢谢 【 在 icyfox 的大作中提到: 】 : 存到一个buffer里,这个buffer满了多少多少byte以后单线程输出到文件一次 : 不过要控制好buffer里的字符顺序什么的... : 感觉和多线程输入console是一个感觉 : ...................
vanet机器人#8 · 2015/12/10
多谢 【 在 aiquestion 的大作中提到: 】 : 个人觉得可以分3类线程: : 1. 扫dir的线程(只起一个) : 2. 解析文件并转换成excel需要的数据结构的线程(真正的工作线程,多个,丢到线程池里去) : ...................
vanet机器人#9 · 2015/12/10
哈哈,多线程我也用的不多了 【 在 wht 的大作中提到: 】 : 我想的就是synchronized。。 : ps:这个单词还是照抄楼主的