Это пример:Как правильно синхронизировать и повторно использовать ForkJoinPool в Java?
Вопрос 1:
Как обеспечить RecursiveTaskA закончена перед вызовом doSomethingElse()?
В настоящее время мое решение:
ForkJoinPool pool = new ForkJoinPool();
pool.submit(new RecursiveTaskA());
pool.shutdown();
pool.awaitTermination(1, TimeUnit.MINUTES);
// wait the task to finish
doSomethingElse();
Является ли это правильный путь? Или есть лучший способ?
Вопрос 2:
Если я использую решение выше, то pool.submit (new RecursiveTaskB()); ошибки результата. Я не хочу создавать новый ForkJoinPool, как это сделать?
Любая ссылка, ссылка была бы полезной для меня, спасибо.
Таска создает подзадачу рекурсивна, так что я должен позвонить присоединиться() для каждой подзадачи внутри правой? Если я этого не сделаю, кажется, что программа завершается, прежде чем эти подзадачи будут выполнены. –
Правильно написанная 'taskA' должна заканчиваться только тогда, когда все разветвленные подзадачи закончены. Вот почему это задача fork-join: вы сначала используете fork (создайте подзадачи), затем присоединитесь (подождите их, чтобы закончить и объединить результат). Если это не так, подумайте о переписывании 'RecursiveTaskA'. –
Я вижу. Спасибо. –