Java/Android中 队列的实现方案

本文探讨了在Java和Android开发中实现队列的优先级方案,详细参考了CSDN上的一篇文章。
摘要由CSDN通过智能技术生成
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
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值