java - 当作业到达 threadPoolExecution 时调用所有线程

标签 java multithreading threadpoolexecutor

在常见的workQueue、adPoolExecution架构中,当一个作业到达时,只有一个线程被调用,并且该线程完成工作。 相反,我希望调用所有线程并让所有线程执行任务。

我的场景如下。 我有 5000 个数据项,我必须对每个数据项运行一个任务。事实证明,一一运行它很慢,因此我想在这里使用线程。 假设我使用了 5 个线程。第一个线程将执行前 1000 个数据项,第二个线程将执行接下来的 1000 个数据项,其他线程将依次执行。 现在,当需要对这 5000 个数据项执行的作业到达时,必须调用所有 5 个线程,或者更确切地说,将其从 sleep 状态恢复,以便它可以执行其任务。

在 java 中使用 theadPoolExecution 是如何实现这一点的? 我知道将同一作业的 5 个副本插入队列可能会有所帮助。 但这有很多副作用,例如如果一个线程快速完成其工作,它将占用其他人的工作。

谢谢 维尼思

最佳答案

由于您希望第一个线程处理前 1000 个项目,第二个线程处理另外 1000 个项目,这意味着您希望线程执行不同的任务。相反,如果所有线程执行相同的任务,则意味着所有线程执行相同的数据项(这没有用,并且当线程将结果保存到相同位置时可能会导致问题)。

所以,请不要执行“插入同一作业的 5 个副本”。提交不同的任务,具有不同的数据范围。

    for (int k=0; k<N; k+=1000) {
       final int datapoint=k;
       executor.execute(new Runnable() {
           processDataRange(datapoint, datapoint+1000);
       });
    }

在循环的每次传递中,都会创建具有不同参数的新任务并将其提交给执行器。

关于java - 当作业到达 threadPoolExecution 时调用所有线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13522195/

相关文章:

java - 如何从我的 Java 应用程序设置 Selenium 的代理设置?

java - 如何用表和一些数据在内存中预填充 Derby?

java - jbutton 请求并发无响应

java - 异常(数组索引越界异常)

Python 线程 : Multiple While True loops

我可以通过线程进入应用程序来测量 Linux 中的 CPU 使用率吗

python - 我怎样才能优雅地组织这个多线程Python代码呢?

java - async-http-client 请求与 NettyAsyncHttpProvider 超时

java - ThreadPoolExecutor 中使用 BlockingQueue 的内存使用情况

java - 使用 ScheduledThreadPoolExecutor 允许核心线程超时