问题
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