Java 任务队列实现:顺序执行任务,附源码
Java 任务队列实现:顺序执行任务,附源码
本文将介绍如何使用 Java 实现一个简单的任务队列,确保任务按照先进先出的顺序依次执行,并提供完整的代码示例。
代码实现
以下是一个简单的任务队列实现,使用 Java 语言实现。该实现使用了一个线程池来执行任务,并且每个任务都是按照先进先出的顺序执行的。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
public class TaskQueue {
private ExecutorService executor;
private LinkedBlockingQueue<Runnable> queue;
public TaskQueue(int numThreads) {
executor = Executors.newFixedThreadPool(numThreads);
queue = new LinkedBlockingQueue<>();
}
public void addTask(Runnable task) {
queue.add(task);
if (queue.size() == 1) {
executor.submit(new TaskRunner());
}
}
private class TaskRunner implements Runnable {
public void run() {
while (true) {
try {
Runnable task = queue.take();
task.run();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
return;
}
}
}
}
}
使用示例
TaskQueue taskQueue = new TaskQueue(2); // 创建一个最多同时执行两个任务的任务队列
taskQueue.addTask(new Runnable() {
public void run() {
System.out.println('Task 1');
}
});
taskQueue.addTask(new Runnable() {
public void run() {
System.out.println('Task 2');
}
});
taskQueue.addTask(new Runnable() {
public void run() {
System.out.println('Task 3');
}
});
输出
Task 1
Task 2
Task 3
代码解析
-
TaskQueue 类
- 使用
ExecutorService
来管理线程池,LinkedBlockingQueue
来存储待执行的任务。 addTask()
方法将任务添加到队列中,如果队列为空,则启动一个TaskRunner
线程来执行任务。
- 使用
-
TaskRunner 类
- 使用
while
循环不断从队列中取出任务并执行。 - 使用
queue.take()
方法从队列中取出一个任务,该方法会阻塞直到队列中有任务。 - 使用
task.run()
方法执行任务。
- 使用
总结
本文提供了一个简单的 Java 任务队列实现,可以确保任务按照顺序执行。该实现使用了 ExecutorService
和 LinkedBlockingQueue
,并提供了详细的代码示例和解析。希望本文能够帮助你更好地理解 Java 任务队列的实现原理。
原文地址: http://www.cveoy.top/t/topic/l0D1 著作权归作者所有。请勿转载和采集!