用 PriorityBlockingQueue 实现一个简单的任务调度系统

使用 PriorityBlockingQueue 实现一个简单的任务调度系统主要涉及定义任务的优先级规则和任务处理逻辑。以下是实现步骤和示例代码:

步骤 1: 定义任务类

首先,定义一个任务类(例如 Task),它实现了 Comparable 接口以支持优先级比较。

class Task implements Comparable<Task> {
    private int priority; // 任务优先级,可以是整数
    private String description; // 任务描述

    public Task(int priority, String description) {
        this.priority = priority;
        this.description = description;
    }

    @Override
    public int compareTo(Task other) {
        // 优先级高的排在前面,即数值小的优先级高
        return Integer.compare(this.priority, other.priority);
    }

    @Override
    public String toString() {
        return "Task{" +
               "priority=" + priority +
               ", description='" + description + '\'' +
               '}';
    }
}

步骤 2: 创建任务调度器

创建一个任务调度器类,使用 PriorityBlockingQueue 来管理任务。

public class TaskScheduler {
    private PriorityBlockingQueue<Task> taskQueue;

    public TaskScheduler() {
        this.taskQueue = new PriorityBlockingQueue<>();
    }

    // 添加任务到队列
    public void addTask(Task task) {
        taskQueue.put(task);
    }

    // 从队列中取出并执行任务
    public void executeTasks() throws InterruptedException {
        while (!Thread.currentThread().isInterrupted()) {
            Task task = taskQueue.take(); // 阻塞直到队列中有任务可用
            processTask(task);
        }
    }

    private void processTask(Task task) {
        // 任务处理逻辑,例如打印任务信息
        System.out.println("Executing task: " + task);
        // 这里可以添加实际的任务执行代码
    }
}

步骤 3: 运行任务调度器

创建任务调度器的实例,添加一些任务,并启动任务调度逻辑。

public class TaskSchedulerDemo {
    public static void main(String[] args) {
        TaskScheduler scheduler = new TaskScheduler();

        // 添加一些任务
        scheduler.addTask(new Task(1, "High priority task"));
        scheduler.addTask(new Task(5, "Low priority task"));
        scheduler.addTask(new Task(3, "Medium priority task"));

        // 启动任务执行线程
        Thread taskExecutor = new Thread(() -> {
            try {
                scheduler.executeTasks();
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                System.out.println("Task execution interrupted.");
            }
        });

        taskExecutor.start();
    }
}

在这个示例中,我们创建了一个 TaskScheduler 类,它使用 PriorityBlockingQueue 来存储任务。任务根据优先级自动排序,高优先级的任务会先被执行。executeTasks 方法中的 take() 调用会阻塞,直到队列中有任务可用,这保证了任务按优先级顺序执行。

注意,实际的任务调度系统可能需要考虑更多的因素,如任务的添加和移除操作的线程安全性、任务执行的异常处理、任务执行的并发控制等。此外,可以根据需要实现更复杂的任务取消、暂停和恢复等功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值