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()方法拿到
  • 相关阅读:
    unistd.h文件
    error C3861: “getpid”: 找不到标识符
    #include <unistd.h> 的作用
    VS2013 配置pthread
    VS2008和VC6.0下使用pthread.h头文件
    文件下载之断点续传(客户端与服务端的实现)
    C++ 判断进程是否存在
    C/C++遍历进程和进程ID的小工具
    linux --> 文件系统十问
    网络通信 --> CRC校验
  • 原文地址:https://www.cnblogs.com/fcb-it/p/13296588.html
Copyright © 2011-2022 走看看