当前位置:嗨网首页>书籍在线阅读

11-使用线程安全的阻塞队列在生产者和消费者之间进行交互

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

10.4 使用线程安全的阻塞队列在生产者和消费者之间进行交互

生产者和消费者问题是并发编程的经典问题。一个或多个生产者,把生产数据存储到缓冲区中。然后,一个或多个消费者,从同一个缓冲区中取出数据。生产者和消费者共享缓冲区,为了避免数据不一致的问题,必须控制缓冲区的访问。当缓冲区为空时,消费者等待,直到其中存在数据。当缓冲区已满时,生产者等待,直到其中有空闲空间。无论是在Java还是在其他语言中,生产者和消费者问题几乎都是采用这种技术和同步机制来实现的(请查看本节“参考阅读”部分获取更多信息)。它的优点是可以映射很多的现实情况。

Java 7 并发API针对这类问题引入了 LinkedTransferQueue ,其主要特征如下。

  • 阻塞式:操作无法进行时,线程将被阻塞。
  • 容量无限:可以插入不限数量的元素。
  • 泛型化:必须指明元素类型。

在本节中,我们将学习使用 LinkedTransferQueue 运行大量的生产者和消费者任务,它们会共享一个字符串缓冲区。