Создание нового потока 1 для выполнения задачи выполняется медленнее, чем просто выполнение задачи.
Однако в целом выполнение задачи в отдельном потоке качественно отличается.Это позволяет текущему потоку делать что-то еще, а не ждать завершения задачи.
Однако # 2, конкретная задача, которую вы здесь выполняете:
new ProcessBuilder("cmd", "/c", program.getAbsolutePath()).start();
, которая запускает внешнююпроцесс, чтобы запустить программу, и не ждет его завершения .Это вряд ли заблокирует в течение заметного времени 2 , поэтому есть небольшое (если вообще есть) преимущество в этом в отдельном потоке.
1 - Использование существующего потока (например, через пул потоков, управляемый экземпляром ExecutorService
) будет быстрее.Но даже в этом случае неясно, стоит ли это делать.
2 - Комментатор указал, что Process
не требуется для асинхронной работы с потокомэто запустило это.Действительно, возможно, что запуск процесса заблокирует поток или всю JVM.Это маловероятно на типичной современной платформе с несколькими ядрами.На платформе с одним ядром запуск второго потока может привести к приостановке первого потока ... так что вы все равно не сможете получить асинхронное выполнение.