NIO 和BlockingQueue

NIO:同步式非阻塞IO流
同步–同一个对象或者一段逻辑在同一个时间只允许一个 线程使用
非阻塞–一个线程在没有获取结果也会执行后面的逻辑。
1 缓冲区Buffer:底层是基于数组来进行存储
针对基本类型进行存储 Buffer针对基本类型来进行存储:ByteBuffer,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer,DoubleBuffer,CharBuffer
//表示给底层的字节数组指定大小 缓冲区给定后不可变

    ByteBuffer buffer =ByteBuffer.allocate(10);
    System.out.println(buffer.position());
    buffer.put("abc".getBytes());
    buffer.put("def".getBytes());
   // buffer.flip(); 等同于buffer.limit(buffer.position());
    //        buffer.position(0);
    buffer.flip();

// buffer.limit(buffer.position());
// buffer.position(0);

    //
   //   buffer.hasRemaining()等同于buffer.position()<buffer.limit()
    while (buffer.hasRemaining()){
        byte b=buffer.get();
        System.out.println(b);

Capacity: 定义缓存区容量
Limit:限定位 限定position能到达的最大下表
Position:操作位:用于标记读写位置,读到哪位,position自定挪到哪位。

  2 通道区Channel:面向Buffer进行操作,用于传输数据,,允许双向传输 

3选择器拦截器Selector:程序设计一般在服务端

BlockingQueue - 阻塞式队列
1 FIFO 先进先出
2容量是固定的,不可扩容
3阻塞:如果队列为空,获取元素的线程阻塞 。队列已满,往里面放的元素阻塞
4 不允许里面的元素为null
5 适用于生产消费模型
6重要方法
抛出异常 返回特殊值 永久阻塞 定时阻塞
添加 add - IllegalStateException offer - false put offer
获取 remove - NoSuchElementException poll - null take poll

常用类:
1 ArrayBlockingQueue - 阻塞式顺序队列:
基于数组
使用时要指定容量
LinkedBlockingQueue - 阻塞式链式队列:
底层必然基于节点来存储数据
在使用的时候可以指定容量也可以不指定。如果指定容量,则容量不可变;如果不指定容量,则容量默认为Integer.MAX_VALUE = 231-1不可变。因为实际开发中,一般不会在队列中存储21亿个元素,所以一般认为此时的容量是无限的
PriorityBlockingQueue - 具有优先级的阻塞式队列:
底层是基于数组来存储元素
使用的时候可以指定容量也可以不指定。如果不指定则默认初始容量是11
PriorityBlockingQueue会对放入的元素来进行排序,要求元素对应的类实现Comparable接口,覆盖compareTo方法指定比较规则
PriorityBlockingQueue在迭代遍历的时候不保证排序
SynchronousQueue - 同步队列 - 在使用的时候不需要指定容量,容量默认为1且只能为1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值