当前位置: 首页 > 面试题库 >

多线程最佳实践:约束任务newFixedThreadPool

范豪
2023-03-14
问题内容

我想启动许多要在+
-42Mio记录的数据库上运行的任务。我想批量运行5000条记录/时间(结果是850个任务)。我还想将线程数限制为16个,因此Java开始为我执行此操作,并且我正在使用当前代码来完成此任务:

 ExecutorService executorService = Executors.newFixedThreadPool(16);
 for (int j = 1; j < 900 + 1; j++) {
     int start = (j - 1) * 5000;
     int stop = (j) * 5000- 1;
     FetcherRunner runner = new FetcherRunner(routes, start, stop);
     executorService.submit(runner);

     Thread t = new Thread(runner);
     threadsList.add(t);
     t.start();
 }

这是正确的方法吗?特别是当我有一种印象,即Java会触发所有任务…(FetcherRunner实现runnable


问题答案:

使用ExecutorService的第一部分看起来不错:

...
FetcherRunner runner = new FetcherRunner(routes, start, stop);
executorService.submit(runner);

带有Thread的部分不应该在那儿,我假设您在那儿只是为了展示您以前的经历?

更新:
是的,您不需要之后的代码executorService.submit(runner),最终将产生大量线程。如果您的目标是在循环后等待所有提交的任务完成,则可以Future在提交任务时获取参考,然后等待Future,如下所示:

ExecutorService executorService = Executors.newFixedThreadPool(16);
List<Future<Result>> futures = ..;
 for (int j = 1; j < 900+ 1; j++) {
 int start = (j - 1) * 5000;
 int stop = (j) * 5000- 1;
 FetcherRunner runner = new FetcherRunner(routes, start, stop);
 futures.add(executorService.submit(runner));

}
for (Future<Result> future:futures){
    future.get(); //Do something with the results..
}


 类似资料:
  • 译者:cvley torch.multiprocessing 是 Python 的 multiprocessing 的直接替代模块。它支持完全相同的操作,但进行了扩展,这样所有的张量就可以通过一个 multiprocessing.Queue 进行传递,将数据移动到共享内存并只将句柄传递到另一个进程。 注意 当一个 Tensor 传递到另一个进程时,Tensor 的数据是共享的。如果 torch.T

  • torch.multiprocessing是Pythonmultiprocessing的替代品。它支持完全相同的操作,但扩展了它以便通过multiprocessing.Queue发送的所有张量将其数据移动到共享内存中,并且只会向其他进程发送一个句柄。 Note 当Variable发送到另一个进程时,Variable.data和Variable.grad.data都将被共享。 这允许实现各种训练方法

  • 假设一个正在运行一个设置为并行的集群 使用每个任务槽运行多个TM 使用多个任务槽运行单个/几个TM 我们正在运行版本为1.6.3的Flink群集。Flink 1.7发行说明指出,“Flink现在正确地支持具有多个插槽的TaskManager”。在以前的版本中,是否建议从单个插槽开始?

  • 我有一个小型Android应用程序,我需要每隔几秒钟在其中执行一些FTP操作。在学习了在UI线程上运行网络内容是Android不喜欢的艰难方式后,我想到了这个解决方案: 这是执行不能直接在UI线程上运行的重复任务的好做法吗?此外,而不是通过调用始终创建一个新的Asyncask对象 创建< code>CheckFtpTask对象一次,然后重用它,这是一种选择吗?还是会给我带来副作用? 先谢谢你Jen

  • 问题内容: 我在Java线程方面有一些经验,但我想知道… 存储多个线程的最佳实践是什么,我可以在其中单独或成组访问这些线程? 我自己的解决方案是创建一个类,但是自然地,我希望使用更可靠的本机类。 提前致谢! 编辑 显然,功能对于最佳方法非常重要。好吧,我举一个例子: 我有一个基本上可以同时搜索大量信息的应用程序,因此我正在使用线程。但是,每个线程仅需要执行整个操作的一部分,因此我希望添加其他参数来

  • 1.1 前言 本文档主要通过实例指导如何在HPB主网上发布智能合约教程。 文档阅读人员:社区开发人员、测试人员、运维人员。 1.2 学习准备 1.2.1 Solidity语言 Solidity是一种开源的智能合约高级语言,可以运行支持开源的Ethereum虚拟机(EVM)之上。 具体的语言介绍和学习入门,在以下的网址中有详细介绍: https://solidity.readthedocs.io/e