多线程part7-等待唤醒机制 

 

  一个多线程协作模式

消费者

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

  没有则等待,有则消费

  消费之后唤醒生产者

生产者

  判断中间类是否有消费品

  有则等待,没有则生产

  消费品放在中间类

  唤醒消费者

常用方法:

  需要用锁对象去调用

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

  让当前线程跟锁绑定

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

  void notifyAll()  唤醒所有线程  

 

阻塞队列实现

中间类相当于一个管道

阻塞情况:

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

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

阻塞队列的继承结构

四个接口

  Iterable

  Collection

  Queue

  BlockingQueue

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

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

  Queue说明是队列

  BlockingQueue说明是阻塞队列

两个实现类对象

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

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

细节:

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

阻塞队列的两个方法

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

posted @ 2023-07-11 03:10  名泽  阅读(9)  评论(0)    收藏  举报