1

ループ内のものを待たずに継続的に実行されるループが必要です。例えば、以下の例では、リストを反復して doSomething() というメソッドを呼び出し、doSomething() メソッドが呼び出されるとすぐにループを 2 番目の項目、3 番目の項目、など…</p>

 while(it.hasNext())
 {
    MyObject obj = (MyObject)it.next();
    doSomething(obj);
 }

ポーラーで実行できますが、ポーラーでは実行したくありません。

事前にご協力いただきありがとうございます。

4

2 に答える 2

5

これを行うには、複数のスレッドを実行する必要があります。これにより、複数の呼び出しを並行して実行できます。これは手動で行うことができますが、などの既存のユーティリティを使用することをお勧めしますThreadPoolExecutor。これによりRunnables、それらが並行して実行されます。

例えば

// Create an executor that can run up to 10 jobs in parallel.
ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 10, 5, TimeUnit.Seconds, new LinkedBlockingQueue());
while(it.hasNext()) {
    // NB: Final is needed so that this can be accessed within the anonymous inner class
    final MyObject obj = (MyObject)it.next();
    // Queue up the doSomething to be run by one of the 10 threads
    executor.execute(new Runnable() {
        public void run() {
            doSomething(obj);
        }
    }
}

このコードを使用すると、ループはdoSomethingメソッドの実行をスケジュールするだけです。その後、次の実行に進みます。実際のdoSomethingは、によって管理される10個のスレッドの1つによって実行されThreadPoolExecutorます。

于 2012-11-16T09:49:25.493 に答える
1

私は通常、「doSomething」を実行する新しいスレッドを生成することをお勧めしますが、実際には「doSomething」が何をするか、反復するオブジェクトの数などによって異なります。

于 2012-11-16T09:49:06.050 に答える