java 阻塞队列自定义实现


自定义阻塞队列:思路==》阻塞队列有这样一个特点,当队列中没有值得时候,这是只允许值得插入,当队列中有值得时候,这时候允许队列的插入,同时也允许队列中元素的移除,但是当队列中没有值得时候,这时候就不允许队列的移除了,而是等待其他线程插入新的元素
public class BlockingQueue<E> {
     private LinkedList<E>list=new LinkedList<>();
     /**
      * 阻塞队列插入:一旦插入说明阻塞队列中有值,这是唤醒其他线程过来取
      *@parame
      */
     publicvoid push(E e){
          synchronized(list){
              list.add(e);
              list.notifyAll(); 
          }
     }
     /**
      * 如果链表中没有值,则所有线程进入到等待状态,知道有线程插入为止
      *@return
      */
     publicE poll(){
          synchronized(list){
              while(list.size()==0){
                   try{
                        list.wait();
                   }catch(InterruptedException e) {
                        e.printStackTrace();
                   }
              }
              E e =list.remove();
              returne;
          }
     }
}


利用自定义的阻塞队列实现生产者消费者
public class Test{ 
     public static void main(String[] args){ 
         ExecutorService exec = Executors.newCachedThreadPool(); 
         BlockingQueue<Integer> queue =new BlockingQueue<>(); 
         exec.execute(newConsumer<>(queue)); 
         exec.execute(newProducer<>(queue, 1)); 
         exec.execute(newConsumer<>(queue)); 
         exec.execute(newProducer<>(queue, 2)); 
         exec.execute(newConsumer<>(queue)); 
         exec.execute(newProducer<>(queue, 3)); 
      
       } 
     
}
class Consumer<E> implements Runnable { 
      private BlockingQueue<E>queue; 
      
      public Consumer(BlockingQueue<E> queue) { 
        this.queue= queue; 
       } 
      
      @SuppressWarnings("unused") 
      @Override 
      public void run() { 
         E e =queue.poll(); 
         System.out.println("消费一个:"+e);
       } 
} 
      
      
class Producer<E> implements Runnable { 
      private BlockingQueue<E> queue; 
      private E e; 
      
      public Producer(BlockingQueue<E> queue, E e) { 
        this.queue= queue; 
        this.e= e; 
       } 
      
      @Override 
      public void run() { 
        queue.push(e); 
         System.out.println("生产一个:"+e);
       } 
}


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fjkxyl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值