zoukankan      html  css  js  c++  java
  • 并发编程:阻塞队列、原子操作

    阻塞队列

    • 插入元素
      add():添加元素,满了抛异常。
      put():添加元素,满了之后会阻塞。
      offer():添加元素,添加失败后返回false。
      offer(time):添加元素,阻塞一段时间后失败返回false,假如在这期间队列有位置了则添加成功。

    • 删除/获取元素
      remove():从队列中获取数据,没获取到抛异常。
      taker():从队列中取数据,方法会阻塞住操作。
      poll():从队列中获取数据,没获取到返回null。
      poll(time):从队列中获取数据,会阻塞一段时间。

    • offer()方法:通过加锁来添加元素,假如满了返回false

    • 用了Condition实现阻塞,存在Condition-NotEmpty(空的时候阻塞,非空的时候唤醒),Condition-NotFull(满的时候阻塞,非满的时候唤醒)

    • offer(time)方法,用了wait(time)实现定时阻塞

    使用阻塞队列实现生产者消费者模型。
    生产者消费者模型的优点

    • 顺序消费
    • 解耦:解决生产消费强依赖
    • 解决生产者消费者速率不对等的问题(其实也算解耦)
    ArrayBlockingQueue

    数组实现的阻塞队列,初始化大小后无法修改。

    LinkedBlockingQueue

    链表实现的阻塞队列,默认大小Inter.MAX_VALUE。

    DelayQueue

    延迟队列,元素必须实现Delayed接口。

    SynchronousBlockingQueue

    队列中不存储任何元素,传入元素必须等被取走后才能继续传入,类似于一个阻塞的中转站,强制两边同步。

    PriorityBlockingQueue

    无界的并发队列,可以按照Priority排序,类似堆结构,可以称为优先队列。

    原子操作

    原子操作基于CAS实现,预期值要记得使用getIntVolatile()方法拿到
  • 相关阅读:
    sql server 报表允许用windows 身份登录的任何人进入
    缩小sql server 日志文件
    IIS Internal Server Error &IIS8中部署WCF服务出错:HTTP 错误 404.3
    less 学习
    访问Index function 两次
    欢迎访问我的个人网站!
    我的web小游戏【持续更新中】
    排序算法(C#)
    存储过程详解
    C#集合
  • 原文地址:https://www.cnblogs.com/fcb-it/p/13296588.html
Copyright © 2011-2022 走看看