我已经从 db 中检索了数千条记录到ArrayList
. 我需要根据这些记录形成报告。
如何在 Java 中应用多线程来实现此功能。
在不知道您正在尝试的细节的情况下,我会向您指出Executor 教程。
使用 Executor 框架允许您将工作拆分为作业(Callables),并且 executor 将并行执行这些作业(使用池等)。您只需查询/等待您的工作完成,而无需处理notify()
/ wait()
/join()
等的复杂性。
API 抽象出池/线程创建问题以及调度和确定您的作业何时完成(和/或异常处理)
您需要提供更多详细信息,但通常生产者-消费者模式应该可以工作。尝试一些简单的东西,例如ExecutorService
:
final List<Record> records = //...
final ExecutorService executorService = Executors.newFixedThreadPool(10);
for (final Record record : records) {
executorService.submit(new Runnable() {
@Override
public void run() {
//process record here
}
});
}
此代码将获取每条记录并在最多 10 个线程中并行处理它。当然,这取决于您的要求,您想用它做什么。例如用于Callable<T>
返回一些结果,ExecutorCompletionService
等待第一个结果等。