Conversation
|
Ввел тредпулы для рекурсивного перебора папок и для асинхронного похода на гугл: код заработал достаточно шустро. Но появилась проблема с завершением программы (она также описана в комментариях к коду): несмотря на то что все вычисления завершаются успешно, программа не заканчивается с кодом 1. То есть недобит какой-то тред (и этот тред явно из ForkJoinPool, так как проблема появилась еще до асинхронных походов на гугл). Было бы интересно узнать, каким образом возможно исправить этот недостаток. |
| for (Path filePath : Files.newDirectoryStream(dirPath)) { | ||
| if (Files.isDirectory(filePath)) { | ||
| DirAction nestedDirAction = new DirAction(filePath); | ||
| nestedDirAction.fork(); |
There was a problem hiding this comment.
результат этой операции надо сохранить и в конце этого метода их всех дождаться, поэтому проблемы с выходом из программы
| } finally { | ||
| // даже несмотря на этот join какой-то тред не закрывается | ||
| // даже после проведения всех требуемых вычислений :( | ||
| this.join(); |
| } | ||
|
|
||
| private void outputStringAssemble () { | ||
| SearchCall searchCall = new SearchCall(dirPath); |
There was a problem hiding this comment.
вот эти классы должны быть тоже тасками и их надо форкать а потом джойнить
| testCount(); | ||
| testSearch(); | ||
| } | ||
| Path path = Path.of("C:\\1_Konstantin\\1_hh\\concurrency\\hh-school-1\\" + |
|
домашку принял, времени подробно в несколько итераций пофиксить не хватает, общие замечания написал |
К сожалению, домашка пока сыровата и уже за дедлайном, так как меня "сожрал" выпускной проект. Но я все равно хотел бы ей заняться, так как очень захватила тема параллельных вычислений.
Хотел реализовать тредпулы (чтобы избежать неконтроллируемого роста количества тредов), но не получилось: почему-то треды, загруженные в ExecutionService, запускались последовательно, что странно. Буду продолжать работу.