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

代码解析

  1. TaskQueue 类

    • 使用 ExecutorService 来管理线程池,LinkedBlockingQueue 来存储待执行的任务。
    • addTask() 方法将任务添加到队列中,如果队列为空,则启动一个 TaskRunner 线程来执行任务。
  2. TaskRunner 类

    • 使用 while 循环不断从队列中取出任务并执行。
    • 使用 queue.take() 方法从队列中取出一个任务,该方法会阻塞直到队列中有任务。
    • 使用 task.run() 方法执行任务。

总结

本文提供了一个简单的 Java 任务队列实现,可以确保任务按照顺序执行。该实现使用了 ExecutorServiceLinkedBlockingQueue,并提供了详细的代码示例和解析。希望本文能够帮助你更好地理解 Java 任务队列的实现原理。

Java 任务队列实现:顺序执行任务,附源码

原文地址: http://www.cveoy.top/t/topic/l0D1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录