は、収集するために、バックグラウンドスレッドを使用して、バッチで処理オブジェクトを簡単に試みだとプロセスオブジェクトは、他のスレッドによってキューにプッシュ:
public abstract class Batcher<E> implements Runnable {
public static interface BatchProcessor<E> {
public void processBatch(List<E> batch);
}
private final BlockingQueue<E> queue;
private final BatchProcessor<E> processor;
private Batcher(BlockingQueue<E> queue, BatchProcessor<E> processor) {
this.queue = queue;
this.processor = processor;
}
@Override
public void run() {
try {
while (true) {
List<E> batch = new ArrayList<E>();
for (int i = 0; i < 10; i++) {
batch.add(queue.take());
}
processor.processBatch(batch);
}
} catch (InterruptedException e) {
return;
}
}
}
これを使用するには、BlockingQueue
を作成し、上のオブジェクトを置きますバッチを処理するためのBatchProcessor
のインプリメンテーションのインスタンスを作成し、次にオブジェクトを前者から後者にポンピングするBatcher
のインスタンスを作成します。
これはどのようにバッチ処理の問題に対処していますか?私はそうは思わない。 –