package com.amazonaws.services.kinesis.producer.demo; import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.stream.Collectors; import java.util.stream.IntStream; public class MultithreadedClickEventsToKinesis extends AbstractClickEventsToKinesis { private final List<BasicClickEventsToKinesis> children; private final ExecutorService executor; public MultithreadedClickEventsToKinesis( BlockingQueue<ClickEvent> inputQueue) { super(inputQueue); children = IntStream.range(0, 70) .mapToObj(i -> new BasicClickEventsToKinesis(inputQueue)) .collect(Collectors.toList()); executor = Executors.newCachedThreadPool(); } @Override public void run() { children.forEach(c -> executor.submit(c)); } @Override protected void runOnce() throws Exception { // never called } @Override public long recordsPut() { return children.stream().mapToLong( BasicClickEventsToKinesis::recordsPut).sum(); } @Override public void stop() { children.forEach(BasicClickEventsToKinesis::stop); } }