设计思路
- 定义
Task
类,包含任务ID、任务优先级和任务执行时间属性。
- 创建一个实现
Comparator<Task>
接口的自定义比较器,在比较时先比较任务优先级,优先级相同再比较任务执行时间。
- 使用
PriorityBlockingQueue
来存储Task
对象,构造PriorityBlockingQueue
时传入自定义比较器。
核心Java代码实现
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.Comparator;
class Task {
private int taskId;
private int priority;
private long executionTime;
public Task(int taskId, int priority, long executionTime) {
this.taskId = taskId;
this.priority = priority;
this.executionTime = executionTime;
}
public int getTaskId() {
return taskId;
}
public int getPriority() {
return priority;
}
public long getExecutionTime() {
return executionTime;
}
@Override
public String toString() {
return "Task{" +
"taskId=" + taskId +
", priority=" + priority +
", executionTime=" + executionTime +
'}';
}
}
class TaskComparator implements Comparator<Task> {
@Override
public int compare(Task task1, Task task2) {
if (task1.getPriority() != task2.getPriority()) {
return task1.getPriority() - task2.getPriority();
} else {
return (int) (task1.getExecutionTime() - task2.getExecutionTime());
}
}
}
public class TaskQueueExample {
public static void main(String[] args) {
BlockingQueue<Task> taskQueue = new PriorityBlockingQueue<>(10, new TaskComparator());
taskQueue.add(new Task(1, 2, 100L));
taskQueue.add(new Task(2, 1, 200L));
taskQueue.add(new Task(3, 2, 50L));
while (!taskQueue.isEmpty()) {
System.out.println(taskQueue.poll());
}
}
}