Что быстрее для метода?Поток или "метод oneline" - Java - PullRequest
0 голосов
/ 23 октября 2018

У меня есть метод, который должен работать очень быстро.Скорость программы не важна, важно только то, что метод, вызывающий следующий код, быстр.У меня есть два варианта, во-первых, я открываю новый поток, во-вторых, запустить метод напрямую.

Вариант один:

new Thread(() -> executeProgram(programs.get("progname"))).start();

Вариант два:

executeProgram(programs.get("progname.jar"));

Метод executeProgram таков:

private void executeProgram(File program){
    try {
        new ProcessBuilder("cmd", "/c", program.getAbsolutePath()).start();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

1 Ответ

0 голосов
/ 23 октября 2018

Создание нового потока 1 для выполнения задачи выполняется медленнее, чем просто выполнение задачи.

Однако в целом выполнение задачи в отдельном потоке качественно отличается.Это позволяет текущему потоку делать что-то еще, а не ждать завершения задачи.

Однако # 2, конкретная задача, которую вы здесь выполняете:

  new ProcessBuilder("cmd", "/c", program.getAbsolutePath()).start();

, которая запускает внешнююпроцесс, чтобы запустить программу, и не ждет его завершения .Это вряд ли заблокирует в течение заметного времени 2 , поэтому есть небольшое (если вообще есть) преимущество в этом в отдельном потоке.


1 - Использование существующего потока (например, через пул потоков, управляемый экземпляром ExecutorService) будет быстрее.Но даже в этом случае неясно, стоит ли это делать.

2 - Комментатор указал, что Process не требуется для асинхронной работы с потокомэто запустило это.Действительно, возможно, что запуск процесса заблокирует поток или всю JVM.Это маловероятно на типичной современной платформе с несколькими ядрами.На платформе с одним ядром запуск второго потока может привести к приостановке первого потока ... так что вы все равно не сможете получить асинхронное выполнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...