多个线程将数据注入后续进程

时间:2011-09-14 12:39:28

标签: java multithreading

我有一个使用Java制作的项目。

我有一个复杂的处理,类似于从一个单独的进程创建10个不同的线程,然后该进程等待其他线程完成处理。现在,创建的线程执行一些数据库处理,然后最终生成输出。但这里的问题是,一直在等待的进程,再次需要处理在创建的线程中创建的所有数据,以及聚合结果的排序。

我几乎无能为力。

此致

6 个答案:

答案 0 :(得分:3)

您可以使用java.util.concurrent.ConcurrentLinkedQueue。让每个线程在完成后将结果放在队列中。主线程只是监视队列并在结果进入时处理结果。

另一种选择是使用期货。而不是线程只是为每个进程使用Futures。主线程将在等待每个未来完成它的处理时阻塞。

答案 1 :(得分:1)

您可以考虑使用BlockingQueue在一个数据结构中聚合所有数据。

然后,您的主进程可以使用此队列(甚至在所有线程实际完成其工作之前)。

答案 2 :(得分:0)

您需要在主线程中启动10个线程,并等待它们完成。这可以在10个已启动的线程中的每一个上调用Thread.join()(在它们全部启动之后)。

有关线程的更多信息,请阅读the Java tutorial about concurrency

答案 3 :(得分:0)

如果您的困难是如何在主线程中等待子线程完成其工作,那么您可以在主线程的子线程上使用childThread.join()。如果您对如何将子线程从db availble带到主线程进行处理所带来的结果感到困扰,那么使用一些由子线程填充的共享数据结构,然后由主线程访问。 (确保正确同步)

但是,对于所有此类任务,最好在Java 1.6中使用Executor框架。

答案 4 :(得分:0)

您可以使用共享对象向其添加数据。

如果我理解的话:

创建一个将最终保存所有数据的类(例如MyData)。这个类可以有“getData”方法返回数据,“add”方法可以将数据添加到你选择的某个集合中(数组,列表,......)。

然后当线程完成处理它调用的数据时:

MyData.add(partialDataFromThread)

最后你的主要课程将会:

MainClass.process(MyData.getDatA());

希望它有所帮助...

答案 5 :(得分:0)

您可以使用java.util.concurrent.CompletionService提交和轮询任务完成。

或者查看CountdownLatch或CyclicBarrier类。

如果您需要示例,请告诉我,因为我认为互联网已经充满了这样的例子; javadocs也非常好,而且一手掌握它总是一个很好的学习曲线。