• java中的队列


    转载自:http://blog.csdn.net/guijava/article/details/3784658   

    通俗的解释
    消息队列,顾名思义 首先是个队列。
    队列的操作有入队出队

    也就是你有一个程序在产生内容然后入队(生产者) 另一个程序读取内容,内容出队(消费者)

    这是最最基本的概念。

    我想你应该是缺乏一个使用场景。

    当你不需要立即获得结果,但是并发量又不能无限大的时候,差不多就是你需要使用消息队列的时候。

    比如你写日志,因为可能一个客户端有多个操作去写,又有很多个客户端,显然并发不能无穷大,于是你就需要把写日志的请求放入到消息队列里,在消费者那边依次把队列中产生的日志写到数据库里。 

              消息队列有无数开源实现,一般没必要自己实现。zmq也好rabbitmq也好甚至redis也好,找一个合适的装上用就行

    就好像rdbms/nosql一样

    技术都是解决问题的,消息队列解决的是将突发大量请求转换为后端能承受的队列请求,比如你的服务器一秒能处理100个订单,但秒杀活动1秒进来1000个订单,持续10秒,在后端能力无法增加的情况下,你可以用消息队列将总共10000个请求压在队列里,后台consumer按原有能力处理,100秒后处理完所有请求(而不是直接宕机丢失订单数据)

    在java5中新增加了java.util.Queue接口,用以支持队列的常见操作。Queue接口与List、Set同一级别,都是继承了Collection接口。
    Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优
    点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用
    element()或者peek()方法。
    值得注意的是LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

    LinkedList实现了Queue接口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口

    复制代码
     1 小例子: 
     2 
     3 /**
     4  *
     5  * @author Zang XT
     6  */
     7 import java.util.Queue;
     8 import java.util.LinkedList;
     9 public class TestQueue {
    10     public static void main(String[] args) {
    11         Queue<String> queue = new LinkedList<String>();
    12         queue.offer("Hello");
    13         queue.offer("World!");
    14         queue.offer("你好!");
    15         System.out.println(queue.size());
    16         String str;
    17         while((str=queue.poll())!=null){
    18             System.out.print(str);
    19         }
    20         System.out.println();
    21         System.out.println(queue.size());
    22     }
    23 }
    复制代码
  • 相关阅读:
    手把手教你封装属于自己的分段滚动视图(上)
    从 setNeedsLayout 说起
    cocoapods使用指南
    神奇的 BlocksKit(1):源码分析(下)
    Web应用开发中的几个问题
    Jquery Ajax自定义无刷新提交表单Form
    解耦HTML、CSS和JavaScript
    通过预加载器提升网页加载速度
    巧妙使用CSS创建可以打印的页面
    有用的JavaScript开发小建议
  • 原文地址:https://www.cnblogs.com/ruiati/p/6137596.html
Copyright © 2020-2023  润新知