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

旧时模样 提交于 2019-12-25 07:41:10

问题


Hi all I want to create a job queue to execute multiple task.but,my requirement is i should be able to add tasks to that job queue any time and all those tasks should be executed sequentially. I searched some solutions in 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 solution.Because after starting Executor service I can't add new task to the service. Because we know that It may throw InterruptedException or ConcurrentModificationException.


回答1:


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");
            });
        }
    }

}



回答2:


I think that you should be using an ExecutorService.

  • It maintains a queue of tasks to be run. You can provide your own queue if you need to.
  • New tasks can be added at any time using the submit method.
  • Futures may be obtained when submitting tasks.
  • Tasks may be run one at a time, or in parallel using a pool of worker threads.
  • If you use multiple threads, the various executor service implementations provide different pool management strategies.
  • There are operations for draining and shutting down the service.

you please give some example links

The javadocs have examples.



来源:https://stackoverflow.com/questions/41312981/create-a-job-queue-or-task-controller-and-dynamically-add-task-to-it-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!