Search code examples
javamultithreadingexecutorservice

Create a Job Queue or Task Controller and dynamically add task to it in Java


I want to create a job queue to execute multiple tasks. but, my requirement is I should be able to add tasks to that job queue at any time and all those tasks should be executed sequentially. I searched for some solutions on the internet and found these two links:

  1. Java Thread Pool Executor Example

  2. Java Executor Framework Tutorial and Best Practices

But I can't use both of these solutions. Because after starting the ExecutorService I can't add a new task to the service. Because we know that It may throw InterruptedException or ConcurrentModificationException.


Solution

  • You can use a BlockingQueue to keep waiting in a separate thread until one or more Runnable show up.

    public class Mainer {
        private static final BlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(15);
    
        public static void main(String[] args) {
            Thread t = new Thread(() -> {
                while (true) {
                    try {
                        queue.take().run();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
    
                }
            });
            t.start();
    
            for (int i = 0; i < 10; i++) {
                queue.add(() -> {
                    System.out.println("Hello");
                });
            }
        }
    
    }