Реализован конвейер, состоящий из Manager, Reader, Executor1, Executor2, Writer, наследованные от Runnable (Executor1 дергает Reader, получает от него данные, обрабатывает, затем Executor2 дергает Executor1, получает данные, обрабатывает и так далее).
Manager ставит объекты на конвейер в нужном порядке, затем запускает Reader.run(), который читает входной файл по кусочкам x байт и отдает его на обработку конвейеру.
Необходимо в менеджере создать n потоков Thread(Executor1), которые запустит Reader, отдав каждому потоку x/n байт данных на обработку, которые в порядке очереди примет Writerи запишет в выходной поток.
Проблема в том, что после первой итерации созданные потоки закрываются после Writer, а нужно обработать целый файл. Как решить задачу, не создавая новые потоки, кроме тех n, которые в начале построения конвейера создал менеджер? Можно ли как-то возвращаться после записи в начало потока? Или кидать в поток новые данные еще до того, как старые успеют дойти до райтера и закончить запись (неясно как это реализовать)?
Код без тредов можно посмотреть тут или тут.
Если я правильно понял, вы хотите выполнять какую-то логику в разных потоках над данными которые берете из одного файла и записывать результат обработки в другой файл.
Могу посоветовать сделать один поток - читатель файла - его задача, считывать данные и записывать куски в некую очередь допустим preQueu.
Несколько потоков обработки - мониторят данные в очереди preQueu, если она не пустая берут кусок на обработку и результат записывает в другую очередь postQueu, если preQueu пустая - поток засыпает на некоторое время, после чего опять проверяет очередь preQueu и так в бесконечном цикле, пока менеджер не остановит поток.
Поток записи в файл - в бесконечном цикле (пока не остановит менеджер) мониторит очередь postQueu, если данные есть - записывает их в файл, если данных нет, то засыпает на некоторое время, после чего опять делает проверку.
Смущает только одна фраза:
которые в порядке очереди примет Writer
как только вы сделаете обработку в несколько потоков, вы не можете им указать в каком порядке они должны завершаться, соответственно записывать в файл они будут в том порядке в каком завершать потоки обработки.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей