BufferedReader в многопоточной среде - PullRequest
1 голос
/ 27 апреля 2010

Как читать из BufferedReader одновременно несколькими потоками.

Ответы [ 2 ]

6 голосов
/ 27 апреля 2010

Ну, вы не сможете иметь их на самом деле , одновременно выполняющих чтение. Тем не менее, вы могли бы:

  • Синхронизируйте все операции чтения в одной блокировке, так что только один поток пытается читать одновременно, но все они могут читать в конечном итоге
  • Пусть один поток просто читает и заставит его заполнить потокобезопасную очередь некоторого вида (см. Java.util.concurrent для различных опций), из которой другие потоки выбирают элементы.

Хотите ли вы читать строки за раз или произвольные блоки символов?

0 голосов
/ 27 апреля 2010

Если все потоки должны прочитать все строки из файла, то вы должны создать отдельную буферизованную программу чтения для каждого потока. Если каждый поток обрабатывает по одной строке за раз (и порядок строк не имеет значения), то вам, вероятно, следует использовать модель производителя / потребителя, где только один поток фактически читает из файла и помещает рабочую нагрузку в * 1001. * BlockingQueue , в то время как другие потоки периодически снимают рабочие нагрузки и обрабатывают их. Обратите внимание, что вы сможете уменьшить накладные расходы на блокировку, если прочитаете N строк в список, а затем поместите список в очередь блокировки, вместо того, чтобы помещать каждую отдельную строку непосредственно в очередь блокировки, поскольку это позволит читать несколько строк. / извлечено с помощью одной операции синхронизации ... размещение и удаление каждой строки непосредственно в / из очереди будет очень неэффективным, особенно если их обработка выполняется довольно быстро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...