创建作业队列或任务控制器,并在Java

时间:2016-12-24 11:49:16

标签: java multithreading executorservice

大家好我想创建一个作业队列来执行多个任务。但是,我的要求是我应该能够随时向该作业队列添加任务,并且所有这些任务都应该按顺序执行。我在互联网上搜索了一些解决方案,发现这两个链接1)Java Thread Pool Executor Example 2)Java Executor Framework Tutorial and Best Practices。但是我不能同时使用这两种解决方案。因为在启动Executor服务后我无法向服务添加新任务。因为我们知道它可能会抛出InterruptedException或ConcurrentModificationException。

2 个答案:

答案 0 :(得分:2)

您可以使用BlockingQueue在单独的帖子中等待,直到出现一个或多个Runnable

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

}

答案 1 :(得分:0)

我认为你应该使用ExecutorService

  • 它维护一个要运行的任务队列。如果需要,您可以提供自己的队列。
  • 可以使用submit方法随时添加新任务。
  • 提交任务时可以获得期货。
  • 任务可以一次运行一个,也可以使用工作线程池并行运行。
  • 如果您使用多个线程,各种执行程序服务实现会提供不同的池管理策略。
  • 有用于排空和关闭服务的操作。
  

请举一些示例链接

javadocs有例子。