2012-01-05 6 views
1

それで、クラスCustomClassを返すイテレータがあるとしましょう。イテレータには、多くのCustomClassがあります。さらに、ユーザーが自分のプログラムで5つのスレッドしか自分のプログラムでいつでも実行できると判断するようなものを入力したとしましょう。ように イテレータのスレッドを制限したり、スレッドを再利用したりしますか?

は、このような何かが起こることが予想されます。

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

今、再び5件のみが許可されているとイテレータでより多くの要素があります。しかし、1つのスレッドがrun()で終了した後、it.next()を呼び出して新しいスレッドを作成します。しかし、このスレッドでは定義されていないという問題があります。 CustomClassには、どんな種類のnext()メソッドもありません。どのようにして各スレッドがイテレータに効率的にアクセスできるようにするのですか?

+0

複数のことを同時に実行したくない場合は、スレッドを使用しないでください。 – SLaks

+0

http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html –

+0

複数のことを同時に実行したくないというわけではありません。私はそれをしたいが限界がある。 たとえば、イテレータのオブジェクトがURLをロードするメソッドを実行し、そのURLからイメージをロードしてそのオブジェクトを処理するとします。何人かの人が(より多くの人ではないにしても)弱いつながりを持っているのを見ると、一度に5ページ+画像を同時にロードするだけで、20人ではなく、干渉しないでYouTubeのビデオを見ることができます。 – Apothem

答えて

2

Javaチュートリアルのexecutors and thread poolsのセクションをご覧ください。基本的なアイデアはあなたの仕事をキューに入れることです。スレッドが利用可能になると、それは次の作業を取り上げて実行を開始します。

関連する問題