package com.bisien.test.application;
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
public class Queen {
public static void main(String[] args) {
System.out.println("--------------------- " + Thread.currentThread().getName());
// 这里暂时只开一个窗口。
TaskQueue taskQueue = new TaskQueue(1);
taskQueue.start();
for (int i = 0; i < 10; i++) {
PrintTask task = new PrintTask(i);
taskQueue.add(task);
}
// 队里的打印状况按照我们理想的状态打印出来了
// 我的id是:0 ThreadName :Thread-0
//我的id是:1 ThreadName :Thread-0
//我的id是:2 ThreadName :Thread-0
//我的id是:3 ThreadName :Thread-0
//我的id是:4 ThreadName :Thread-0
//我的id是:5 ThreadName :Thread-0
//我的id是:6 ThreadName :Thread-0
//我的id是:7 ThreadName :Thread-0
//我的id是:8 ThreadName :Thread-0
//我的id是:9 ThreadName :Thread-0
// 如果开启多个窗口的话,第一个买票人,去第一个窗口买票,第二个人去第二个窗口买票,第三个人去第三个窗口买票,第四个人进去排在第一位,
// 当第一、第二、第三、窗口中不论哪一个窗口办完事后(假设买票),第四个人就去那个窗口办事(假设买票),第五个人等待,一次类推,这样子就
// 达到队列同时并发三个任务的效果
// 上面这个就是一个普通队列,其他一些特性也就是在此基础上进行封装的,那么下面我就在此基础上加上任务优先级,也就说我们说的特殊窗口---> 军人优先
}
public static class PrintTask implements ITask{
private int id;
public PrintTask(int id) {
this.id = id;
}
public void run() {
// 为了尽量模拟窗口办事的速度,我们这里停顿两秒。
try {
Thread.sleep(2000);
} catch (InterruptedException ignored) {
}
System.out.println("我的id是:" + id + " ThreadName :" + Thread.currentThread().getName());
}
}
// 办事的人(假设购买火车票)
public interface ITask {
// 具体要办的事
void run();
}
// 窗口(火车站窗口),也就是给买火车票的人办事
public static class TaskExecutor extends Thread {
// 窗口排的队,这个对队里面全是买火车票的人
private BlockingQueue<ITask> taskQueue;
// 判断当前窗口是否开放,true 表示开放
private boolean isRunning = true;
public TaskExecutor(BlockingQueue<ITask> taskQueue) {
this.taskQueue = taskQueue;
}
@Override
Java/Android中 队列的实现方案
最新推荐文章于 2024-05-02 16:56:25 发布
本文探讨了在Java和Android开发中实现队列的优先级方案,详细参考了CSDN上的一篇文章。
摘要由CSDN通过智能技术生成