バックグラウンド スレッドを使用して、他のスレッドによってキューにプッシュされたオブジェクトを収集して処理する、バッチでオブジェクトを処理する簡単な試みを次に示します。
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
して前者から後者にオブジェクトを送り込みます。