博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NoHttp封装--06 NoHttp之队列、队列优先级
阅读量:7009 次
发布时间:2019-06-28

本文共 4435 字,大约阅读时间需要 14 分钟。

public class Main {    /**     * 程序入口     */    public void start() {        // 第一种,先进先出的队列        // YolandaLinkedQueue queue = new YolandaLinkedQueue(3);        // queue.start();        // 第二种,没有顺序的队列        YolandaQueue queue = new YolandaQueue(1);        queue.start();        // 往队列中添加请求        for (int i = 0; i < 20; i++) {            Request request = new Request("请求" + i);            if (i == 10)                request.setPriority(Priority.C);            if (i == 15)                request.setPriority(Priority.D);            queue.add(request);        }    }    public static void main(String[] args) {        Main main = new Main();        main.start();    }}public class YolandaLinkedQueue {    private BlockingQueue
blockingQueue; private TaskExecutor[] taskExecutors; public YolandaLinkedQueue(int poolSize) { // LinkedBlockingQueue是一个先进先出的队列 blockingQueue = new LinkedBlockingQueue<>(); taskExecutors = new TaskExecutor[poolSize]; } public void add(Request request) { blockingQueue.add(request); } public void start() { for (int i = 0; i < taskExecutors.length; i++) { taskExecutors[i] = new TaskExecutor(blockingQueue); taskExecutors[i].start(); } } public void stop() { for (TaskExecutor taskExecutor : taskExecutors) { taskExecutor.setRunning(false); taskExecutor.interrupt(); } }}public class YolandaQueue { private BlockingQueue
blockingQueue; private TaskExecutor[] taskExecutors; private AtomicInteger atomicInteger = new AtomicInteger(); public YolandaQueue(int poolSize) { // 如果Comparable#compareTo(Object)方法不做比较返回0,那么是无序的 blockingQueue = new PriorityBlockingQueue
(); taskExecutors = new TaskExecutor[poolSize]; } public void add(Request request) { request.setOrder(atomicInteger.incrementAndGet()); blockingQueue.add(request); } public void start() { for (int i = 0; i < taskExecutors.length; i++) { taskExecutors[i] = new TaskExecutor(blockingQueue); taskExecutors[i].start(); } } public void stop() { for (TaskExecutor taskExecutor : taskExecutors) { taskExecutor.setRunning(false); taskExecutor.interrupt(); } }}public class TaskExecutor extends Thread { private BlockingQueue
blockingQueue; private boolean isRunning = true; public TaskExecutor(BlockingQueue
blockingQueue) { this.blockingQueue = blockingQueue; } /** * @param isRunning the isRunning to set */ public void setRunning(boolean isRunning) { this.isRunning = isRunning; } @Override public void run() { while (isRunning) { Request request = null; try { // take方法是一个阻塞的方法,每次调用会拿到队列中的第一个任务,如果队列为空,这个方法将一直阻塞,知道队列中有任务再次返回 request = blockingQueue.take(); } catch (InterruptedException e) { return; } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(request.getName()); } }}public class Request implements Comparable
{ private String name; private Priority mPriority = Priority.B; private int order; /** * @param name */ public Request(String name) { super(); this.name = name; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @param mPriority the mPriority to set */ public void setPriority(Priority mPriority) { this.mPriority = mPriority; } /** * @return the mPriority */ public Priority getPriority() { return mPriority; } /** * @return the order */ public int getOrder() { return order; } /** * @param order the order to set */ public void setOrder(int order) { this.order = order; } @Override public int compareTo(Request other) { // 返回正数代表1排在2后面,返回负数表示1排在2前面 Priority priority = getPriority();// 拿到自身的优先级 Priority otherPriority = other.getPriority(); return priority == otherPriority ? getOrder() - other.getOrder() : otherPriority.ordinal() - priority.ordinal(); }}public enum Priority { /** * 优先级最低 */ A, /** * 默认优先级 */ B, /** * 优先级最高 */ C, /** * 一般情况下不用;特殊情况下,请求假如到到队列后立即执行 */ D}

 

 

转载地址:http://lqttl.baihongyu.com/

你可能感兴趣的文章
要想在未来立足 微软等软件公司就必须折本研发硬件
查看>>
个人常用网址集合
查看>>
吉林省将建东北林业大数据中心
查看>>
从互联网到物联网:下一个创新风口到来
查看>>
郭台铭:苹果亚马逊已提供资金 协助富士康收购东芝闪存
查看>>
美40家互联网巨头联合致信特朗普:今后你该这么做
查看>>
记一次磁盘性能测试
查看>>
运营商应对VoIP数据业务是突围之路
查看>>
光伏逆变器竞争格局再重塑?又一条“鲶鱼”出现
查看>>
CYQ.Data 轻量数据访问层(六) 构造数据表
查看>>
超融合的未来发展与使用案例
查看>>
这是数据中心最好的时代,也是最坏的时代
查看>>
QTP使用中的陷阱
查看>>
Cirrus Delaware公司数据中心计划因建设电厂再次受阻
查看>>
前Windows事业部总裁写给CEO和管理者:如何做决策?
查看>>
美国国防部最新报告:美军武器系统可能已经被植入后门
查看>>
Google产品管理副总裁:好产品要不断走出舒适区
查看>>
2016年中国大数据应用将发生质变
查看>>
回忆录:30岁那年,你成长了吗?(上篇)
查看>>
IDEA使用笔记
查看>>