Java JUC (java.util.concurrent) 5 - ThreadPool and ThreadLocal

Java use Thread Pool pattern to save resources in a multithreaded application, and also to contain the parallelism in certain predefined limits. It controls several re-used threads for executing these tasks.

ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
		final int index = i;
		executorService.execute(new Runnable() {
				@Override
				public void run() {
						log.info("task:{}", index);
				}
		});
}
executorService.shutdown();

There are several pre-defined threadpool for various scenarios.

ExecutorService executorService = Executors.newFixedThreadPool(3);
ExecutorService executorService = Executors.newSingleThreadExecutor();
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);

newFixedThreadPool = ThreadPoolExecutor with default

 public static ExecutorService newFixedThreadPool(int nThreads) {
    return new ThreadPoolExecutor(nThreads, nThreads,
                                  0L, TimeUnit.MILLISECONDS,
                                  new LinkedBlockingQueue<Runnable>());
}

The TheadLocal construct allows us to store data that will be accessible only by a specific thread.

private final static ThreadLocal<Long> requestHolder = new ThreadLocal<>();