Как выполнить один и тот же метод одновременно в Java - PullRequest
0 голосов
/ 30 ноября 2018

извините, если это очень простой / глупый вопрос.

У меня есть метод, который запускается за несколько минут.Я хотел бы запустить этот метод одновременно для нескольких объектов.Мне интересно, как я это делаю?Даже просто указатель на правильную документацию.Я не уверен, следует ли мне использовать потоки, или ExecuteService, или что.

Вот метод, который я хотел бы запустить одновременно.Я хочу удалить несколько виртуальных машин одновременно.

private void deleteVm(String workspace, String vmName) {
    println("Delete VirtualMachine: " + vmName + " in Workspace " + workspace);
    Job job = executeDelete(getWorkbench().deleteVirtualMachine(sub(), workspace, vmName));
    println(job);

    subscribeToJobLogs(job);

    awaitUntilJobNotRunningOrNotFound(() -> executeCall(getWorkbench().getVirtualMachineDeleteJob(sub(), workspace, vmName)));
}

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Если вы хотите вызывать метод одновременно, вам нужны потоки.Документация по Java для параллелизма: https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html.

У вас есть много вариантов, как создавать / использовать потоки в Java.

1) если вы знаете, сколько потоков вам нужно, вы можете создавать потоки вручную, напримерэто:

Thread thread1 = new Thread(()->deleteVm("a","b");
Thread thread2 = new Thread(()->deleteVm("c","d");

//START the threads
thread1.start();
thread2.start();

2) вы можете использовать пул потоков по умолчанию (обычно поток на ядро ​​процессора) вот так:

CompletableFuture.runAsync(() -> deleteVm("a", "b"));
CompletableFuture.runAsync(() -> deleteVm("c", "d"));

3) вы можете создать свой собственный исполнитель потоков, как этот

ScheduledExecutorService executorService = Executors.nScheduledExecutorService executorService = Executors.newFixedThreadPool(5)

executorService.submit(() -> deleteVm("a", "b"));
executorService.submit(() -> deleteVm("c", "d"));
0 голосов
/ 30 ноября 2018

Самый простой способ - использовать CompletableFuture

CompletableFuture.runAsync(() -> deleteVm("one", "two"));
CompletableFuture.runAsync(() -> deleteVm("three", "four"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...