博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程下的生产者和消费者 - BlockingQueue
阅读量:6291 次
发布时间:2019-06-22

本文共 1378 字,大约阅读时间需要 4 分钟。

   1.BlockingQueue:支持两个附加操作的 Queue,这两个操作是:检索元素时等待队列变为非空,以及存储元素时等待空间变得可用。

  2.BlockingQueue 不接受 null 元素。

  3.BlockingQueue 可以是限定容量的。

  4.BlockingQueue 实现是线程安全的。Queue不是线程安全的。因此可以将Blockingqueue用于用于生产者-使用者队列

 
  1. import java.util.*; 
  2. import java.util.concurrent.*; 
  3.  
  4. class Producer 
  5.     implements Runnable 
  6.     private BlockingQueue<String> drop; 
  7.     List<String> messages = Arrays.asList( 
  8.         "Mares eat oats"
  9.         "Does eat oats"
  10.         "Little lambs eat ivy"
  11.         "Wouldn't you eat ivy too?"); 
  12.          
  13.     public Producer(BlockingQueue<String> d) { this.drop = d; } 
  14.      
  15.     public void run() 
  16.     { 
  17.         try 
  18.         { 
  19.             for (String s : messages) 
  20.                 drop.put(s); 
  21.             drop.put("DONE"); 
  22.         } 
  23.         catch (InterruptedException intEx) 
  24.         { 
  25.             System.out.println("Interrupted! " +  
  26.                 "Last one out, turn out the lights!"); 
  27.         } 
  28.     }     
  29.  
  30. class Consumer 
  31.     implements Runnable 
  32.     private BlockingQueue<String> drop; 
  33.     public Consumer(BlockingQueue<String> d) { this.drop = d; } 
  34.      
  35.     public void run() 
  36.     { 
  37.         try 
  38.         { 
  39.             String msg = null
  40.             while (!((msg = drop.take()).equals("DONE"))) 
  41.                 System.out.println(msg); 
  42.         } 
  43.         catch (InterruptedException intEx) 
  44.         { 
  45.             System.out.println("Interrupted! " +  
  46.                 "Last one out, turn out the lights!"); 
  47.         } 
  48.     } 
  49.  
  50. public class ABQApp 
  51.     public static void main(String[] args) 
  52.     { 
  53.         BlockingQueue<String> drop = new ArrayBlockingQueue(1true); 
  54.         (new Thread(new Producer(drop))).start(); 
  55.         (new Thread(new Consumer(drop))).start(); 
  56.     } 

 

 

 本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/683090,如需转载请自行联系原作者

你可能感兴趣的文章
mysql 时间函数 时间戳转为日期
查看>>
索引失效 ORA-01502
查看>>
Oracle取月份,不带前面的0
查看>>
Linux Network Device Name issue
查看>>
IP地址的划分实例解答
查看>>
如何查看Linux命令源码
查看>>
运维基础命令
查看>>
入门到进阶React
查看>>
SVN 命令笔记
查看>>
检验手机号码
查看>>
重叠(Overlapped)IO模型
查看>>
Git使用教程
查看>>
使用shell脚本自动监控后台进程,并能自动重启
查看>>
Flex&Bison手册
查看>>
solrCloud+tomcat+zookeeper集群配置
查看>>
/etc/fstab,/etc/mtab,和 /proc/mounts
查看>>
Apache kafka 简介
查看>>
socket通信Demo
查看>>
技术人员的焦虑
查看>>
js 判断整数
查看>>