我已经从db检索了数千条记录到ArrayList
。
我需要根据这些记录形成报告。
如何应用多线程在Java中实现此功能。
答案 0 :(得分:3)
如果不知道您正在尝试的具体内容,我会指向Executor tutorial。
使用Executor框架允许您将工作拆分为作业(Callables),执行程序将并行执行这些作业(使用池等)。您只需查询/等待您的工作完成,而无需处理notify()
/ wait()
/ join()
等的复杂性。
API抽象出池/线程创建问题以及调度并确定作业何时完成(和/或异常处理)
答案 1 :(得分:2)
您需要提供更多详细信息,但通常 Producer-Consumer 模式应该有效。试试像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
等待第一个结果等等。