首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中并发执行相同的方法

如何在Java中并发执行相同的方法
EN

Stack Overflow用户
提问于 2018-11-30 11:56:47
回答 2查看 1.4K关注 0票数 1

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

我有一个方法,它需要几分钟才能运行。我想同时在多个对象上运行这个方法。我在想我怎么做的?甚至只是指向正确文档的指针。我不确定是否应该使用线程,或者ExecuteService之类的。

下面是我想同时运行的方法。我想同时删除多个vm。

代码语言:javascript
复制
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)));
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-30 12:16:37

如果要同时调用方法,则需要线程。用于并发的Java文档:https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html

您有许多在java中创建/使用线程的选项。

1)如果您知道需要多少线程,就可以像这样手动创建线程:

代码语言:javascript
复制
Thread thread1 = new Thread(()->deleteVm("a","b");
Thread thread2 = new Thread(()->deleteVm("c","d");

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

2)您可以使用默认线程池(通常是每个cpu核心线程),如下所示:

代码语言:javascript
复制
CompletableFuture.runAsync(() -> deleteVm("a", "b"));
CompletableFuture.runAsync(() -> deleteVm("c", "d"));

3)您可以像这样创建自己的线程执行器

代码语言:javascript
复制
ScheduledExecutorService executorService = Executors.nScheduledExecutorService executorService = Executors.newFixedThreadPool(5)

executorService.submit(() -> deleteVm("a", "b"));
executorService.submit(() -> deleteVm("c", "d"));
票数 3
EN

Stack Overflow用户

发布于 2018-11-30 12:07:47

最简单的方法是使用CompletableFuture

代码语言:javascript
复制
CompletableFuture.runAsync(() -> deleteVm("one", "two"));
CompletableFuture.runAsync(() -> deleteVm("three", "four"));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53557091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档