【问题标题】:How to use all 4 CPU cores for performing operation using Executor Framework?如何使用 Executor Framework 使用所有 4 个 CPU 内核执行操作?
【发布时间】:2020-08-28 07:39:30
【问题描述】:

我正在尝试从远程 Splunk 服务器执行获取日志操作。我的 CPU 有 4 个内核。我正在使用 Executor Framework,CorePoolSize 为 4。但是,只有 1 个线程正在获取日志。我应该怎么做才能让 4 个线程同时工作?

代码:

public Executor taskExecutor(){
    ThreadPoolTaskExecutor executor= new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(Runtime.getRuntime().availableProecssors());
    executor.setMaxPoolSIze(10);
    executor.setQueueCapacity(100);
    executor.initialize();
    return executor;
}

【问题讨论】:

  • 这是java吗?你是如何执行任务的?任务本身是否同步?你怎么知道只有 1 个线程在工作?
  • 是的,它的 Java。我使用 CompletableFuture 进行异步操作。在 Eclipse 控制台中,我只能看到一个线程正在使用。
  • 您需要包含启动/提交任务的代码。
  • 其实是一个SpringBoot应用。我用过@EnableAsync。我想知道我是否为具有 4 个内核的 CPU 正确配置了线程池。
  • 你检查过“availableProcessors()”返回了什么吗?

标签: java spring multithreading executorservice threadpoolexecutor


【解决方案1】:

你说的是获取日志,也许你不能同时打开同一个文件和/或对其进行操作。

【讨论】:

  • 并发获取日志没有问题。我的问题是我的线程池配置是否适合使用 4 个 cpu 内核,以便我可以使用 4 个线程。
  • 在我使用的控制器中: CompletableFuture> result1= myService.MyFetcherAPI(searchString);CompletableFuture> result2= myService.MyFetcherAPI(searchString); CompletableFuture.allOf(result1,result2).join()
猜你喜欢
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
  • 2020-01-07
  • 2016-05-31
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多