如何将数千条记录传递给线程?

时间:2012-09-28 11:44:19

标签: java multithreading

我已经从db检索了数千条记录到ArrayList。 我需要根据这些记录形成报告。

如何应用多线程在Java中实现此功能。

2 个答案:

答案 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等待第一个结果等等。