Skip to content
Home » How to Create a Thread Pool to Run Tasks Simultaneously and Reuse Threads

How to Create a Thread Pool to Run Tasks Simultaneously and Reuse Threads

various types of thread for sewing inside store for needlework

Here’s how to create a thread pool to run tasks simultaneously and reuse threads in Java.

import java.text.MessageFormat;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Logger;

public class ReusingThreads {

    private static final Logger LOGGER = Logger.getLogger(ReusingThreads.class.getName());

    private static final SecureRandom RANDOM = new SecureRandom();

    public static void main(String[] args) {"Creating a thread pool with 5 threads");
        ExecutorService executor = Executors.newFixedThreadPool(5);

         * Will submit 15 tasks. Note that there's only 5 threads to run all of them in our thread pool.
         * So the first 5 tasks will run simultaneously and 10 tasks will wait in the queue until a thread is available.
         */"Starting tasks submissions.");
        try {
            for (var i = 1; i <= 15; i++) {
                int taskId = i;
       -> MessageFormat.format("Will submit task {0}.", taskId));
                executor.submit(() -> task(taskId));
        } finally {

    private static void task(int taskId) { -> MessageFormat.format("Running task {0}.", taskId));
        simulateLongProcessing(); -> MessageFormat.format("Task {0} has finished.", taskId));

    private static void simulateLongProcessing() {
        try {
            Thread.sleep((RANDOM.nextInt(3) + 10) * 1000L);
        } catch (InterruptedException e) {
            throw new RuntimeException(MessageFormat.format("Thread {0} was interrupted.", Thread.currentThread().getName()), e);

If you have any questions, leave a comment or ask me on my social media.