java - Java中如何并发执行同一个方法

标签 java multithreading concurrency

抱歉,如果这是一个非常基本/愚蠢的问题。

我有一个需要几分钟才能运行的方法。我想同时在多个对象上运行此方法。我想知道我该怎么做?即使只是指向正确文档的指针。我不确定是否应该使用线程,或者 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)));
}

最佳答案

如果你想同时调用方法,你需要线程。 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) 您可以使用默认线程池(通常是每个CPU核心的线程),如下所示:

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"));

关于java - Java中如何并发执行同一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53557091/

相关文章:

multithreading - Log4J - 类似 SiftingAppender 的功能

python - 当QThreadPool不为空时退出?

java - java中的线程争用

ios - 为什么我的 NSManagedObject 在 [moc save] PerformBlockAndWait 之后没有保留?

java - 如何为Executors.newScheduledThreadPool设置RemoveOnCancelPolicy(5)

.net - .Net 中的 setter 是原子的吗?

java - Camel netty定时器必须指定错误

java - 类作为 Android 应用程序的弹出窗口

java - 使用 key=String 和 value=ArrayList<Double> 创建一个映射

类配置中的 Java boolean 选项