Реализовать построчное чтение файла, многопоточную обработку текста, и запись результата в файл в отдельном потоке.
- Чтение обрабатываемого файла выполнять построчно в основном потоке.
- Обработку каждой строки выполнять в отдельном потоке. Количество потоков 2 * кол-во ядер потоков.
- Результаты обработки записывать в файл в отдельном потоке. Формат записи
строка <кол-во символов>
. - Запись в результирующий файл в том же порядке, что и в обрабатываемом.
# загружает gradle wrapper 6.6
./gradlew wrapper
# сборка проекта, прогон тестов
./gradlew clean build
- Допускается использовать дополнительные массивы для хранения данных не больше размера
CHUNK_SIZE
, т.е. хранить только текущие обрабатываемые данные. - Для работы с потоками использовать пул потоков
Executors.newFixedThreadPool()
. - Для синхронизации потоков можно использовать
java.util.concurrent.Phaser
илиjava.util.concurrent.CyclicBarrier
. - Для передачи данных потоку записи в файл можно использовать
java.util.concurrent.Exchanger
.
- Fork этого репозитория
- Merge request вашей реализации в этот репозиторий