开发者

BufferedReader in a multi-threaded environment

How to read from Buff开发者_运维技巧eredReader simultaneously by multiple threads.


Well, you won't be able to have them actually simultaneously performing a read. However, you could:

  • Synchronize all the reads on one lock, so that only one thread tries to read at a time, but they can all read eventually
  • Have one thread just reading, and make it populate a thread-safe queue of some sort (see java.util.concurrent for various options) which the other threads fetch items from.

Are you wanting to read lines at a time, or arbitrary blocks of characters?


If all threads are to read all lines from the file, then you should create a separate buffered reader for each thread. If each thread is processing one line at a time (and the order of lines don't matter), then you should probably use the producer/consumer model, where only one thread actually reads from the file and places the workload in a BlockingQueue, while other threads periodically remove work loads and process them. Note that you will be able to redue locking overhead if you read N lines into a list, and then place the list in the blocking queue, instead of placing each individual line directly in the blocking queue, since that will allow multiple lines to be read/extracted with a single synchronization operation... placing and removing each and every line directly into/out of the queue will be very inefficient, especially if processing them is fairly quick.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜