Я пытаюсь написать небольшую программу для решения следующих проблем с использованием многопоточности в java. Я изо всех сил пытаюсь понять, с чего начать, и ищу совета. Желаемые шаги в этом процессе следующие:
Я написал функцию wordcount, и она отлично работает, но хотел бы узнать больше о том, как выполнить эту операцию в многопоточном режиме, чтобы файлы считывались, слова подсчитывались, а затем вывод был записан параллельно.




Можете ли вы поделиться однопоточной версией? Концептуально это может быть так просто (псевдо-код Java). countWords и writeOutput - ваши методы и files - это список файлов, которые вы уже прочитали.
files.parallelStream()
.map(file -> new Pair(file, countWords(file)))
.forEach((file, count) -> writeOutput(file, count));
Мне нравится ваш энтузиазм в изучении многопоточного программирования!
Помимо параллельной задачи между файлами, вы также можете распараллелить и оптимизировать фактическую задачу countWords.
Это классический случай использования Fork / Join. Довольно продвинутый уровень многопоточного программирования, но очень приятный :)
вы можете поискать в Интернете примеры, похожие на ваш собственный, вот один для начала: https://www.baeldung.com/java-fork-join
Возможно использование функции Stream в Java (docs.oracle.com/javase/tutorial/collections/streams/…). Создайте список файлов, содержащихся в каталоге, и получите parallelStream этих файловых объектов. Затем вы можете обработать каждый файл, возвращая счетчик слов как часть обработки параллельного потока. Затем вы можете выяснить, что делать со счетчиком ... если каждый из них записан в свой собственный файл, это тоже может быть частью обработки потока. Я бы начал там