2012-01-05 43 views
1

所以,假设我有一个迭代器它返回类CustomClass的东西。迭代器具有“许多”CustomClass。更重要的是,让我们说一个用户输入的东西,使我的程序决定只有5个线程可以在我的程序随时运行。限制线程和/或重复使用线程的迭代器?

在某种程度上,这样的事情即将发生:

for(int i = 0; i < 5 && it.hasNext(); i++) { 
    new Thread(it.next()).start(); 
} 

现在,再次只有五是允许的,也有在迭代器有更多元素。但是在一个线程完成run()之后,我希望它调用它.next()并创建一个新的线程。但问题是它没有在这个线程中定义。 CustomClass甚至没有任何类型的next()方法。我将如何完成这项工作,以便每个线程都可以有效地“访问”迭代器?

+0

如果你不想同时做多件事情,不要使用线程。 – SLaks 2012-01-05 23:37:37

+0

看看http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html – 2012-01-05 23:58:27

+0

这不是我不想同时做多件事,它是我想这样做,但有一个限制。 例如,假设迭代器中的对象运行一个加载URL的方法,并从该URL加载图像来处理它。鉴于有些人(如果不是很多)的联系较弱,他们可能希望一次只能同时加载五个页面+图像,而不是二十+,以便能够仍然在YouTube上观看视频而不受干扰。 – Apothem 2012-01-06 02:33:01

回答

2

请看Java教程中的executors and thread pools部分。基本的想法是排列你的工作,当一个线程“变得可用”时,它将接下一个工作并开始执行它。