If you want to spin off a bunch of threads and manage them and their responses effectively you can do it this way.
final ExecutorService executor = Executors.newFixedThreadPool(numThreads); final Collection<Future<JsonNode>> futures = new LinkedList<Future<JsonNode>>(); //Write a Loop if you want final Callable<TYPE> callable = new MyClass(); futures.add(executor.submit(callable)); executor.shutdown(); // We need to monitor the queries for their data being returned. for (final Future<?> future : futures) { try { final TYPE val = (TYPE) future.get(); } catch (final InterruptedException e) { } catch (final ExecutionException e) { } }
The callable works with a class so you will need that.
package mypackage; import java.util.concurrent.Callable; import org.apache.log4j.Logger; public class MyClass implements Callable<JsonNode> { static final Logger logger = Logger.getLogger(MyClass.class); MyClass() { } /** * This is how each caller queries for the data. It can be called many times and runs on threads from the calling class * So data is returned as it gets it. */ @Override public TYPE call() throws Exception { try { return null; } catch (final Exception e) { return null; } } }