多线程part7-等待唤醒机制 

 

  一个多线程协作模式

消费者

  先判断中间类是否有消费品

  没有则等待,有则消费

  消费之后唤醒生产者

生产者

  判断中间类是否有消费品

  有则等待,没有则生产

  消费品放在中间类

  唤醒消费者

常用方法:

  需要用锁对象去调用

  void wait()  让当前线程等待,知道被其他线程唤醒

  让当前线程跟锁绑定

  void notify()  随机唤醒单个线程

  void notifyAll()  唤醒所有线程  

 

阻塞队列实现

中间类相当于一个管道

阻塞情况:

  生产者放数据进管道,如果管道满了,放不进去,会等待

  消费者取数据,管道空,取不到会等待

阻塞队列的继承结构

四个接口

  Iterable

  Collection

  Queue

  BlockingQueue

  Iterable使得可以利用迭代器或增强for来进行遍历

  Collection接口说明塞队列是单列集合

  Queue说明是队列

  BlockingQueue说明是阻塞队列

两个实现类对象

ArrayBlockingQueue  底层由数组实现,有长度的界限,创建时必须指定长度

LinedBlockingQueue  底层是链表,无长度的界限,但不是真正的无界,最大值是int的最大值

细节:

  生产者和消费者必须使用同一个阻塞队列

阻塞队列的两个方法

put()和take()都自带了锁,所以不需要自己写锁,否则可能会导致死锁

posted @   名泽  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示