2012-01-05 41 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部分。基本的想法是排列你的工作,當一個線程「變得可用」時,它將接下一個工作並開始執行它。