排队多个下载,寻找生产者消费者API

时间:2011-06-25 21:44:04

标签: java multithreading producer-consumer download-manager

我有一个应用程序(一个servlet,但这不是很重要),它下载一组文件并解析它们以提取信息。到目前为止,我在循环中完成了这些操作: - 在Internet上获取新文件 - 分析它。

多线程下载管理器似乎是解决此问题的更好解决方案,我希望以尽可能最快的方式实现它。

某些下载依赖于其他下载(因此,此集合已部分订购)。

Mutli线程编程很难,如果我能找到一个API来做到这一点我会很高兴。我需要将一组文件(已订购)放入队列中,并获取完全下载的第一组文件。

你知道我可以用来实现的任何库吗?

此致  斯特凡

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

BlockingQueue<Download> queue = new BlockingQueue<Download>();
ExecutorService pool = Executors.newFixedThreadPool(5);
Download obj = new Download(queue); 
pool.execute(obj); //start download and place on queue once completed
Data data = queue.take(); //get completely downloaded item

如果每次下载的速度不同,您可能必须使用不同类型的队列。我相信BlockingQueue是先进先出。

您可能希望使用PriorityBlockingQueue,它将根据Comparable方法对Download对象进行排序。有关详细信息,请参阅 API here

希望这有帮助。