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