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