【多线程高并发】-Java使用阻塞队列ArrayBlockingQueue实现生产者消费者模式?
发布日期:2021-06-29 15:36:26 浏览次数:2 分类:技术文章

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

在上文中的多线程高并发中,我们已经知道一个阻塞队列的三个基本功能了:

  • 队列的先进先出功能;
  • 队列满时,放数据会被阻塞;
  • 队列空时,取数据会被阻塞;

而本次用Java实现好的ArrayBlockQueue来实现生产者-消费者模式。

  • 生产者往队列里面放东西;
  • 消费者从队列里面取东西;
package com.lcz.tencent.thread;import java.util.concurrent.ArrayBlockingQueue;// 阻塞队列实现多线程下的生产者和消费者模式public class ArrayBlockQueueDemo {
static ArrayBlockingQueue
queue = new ArrayBlockingQueue<>(1); // 主函数 public static void main(String[] args) {
// 生产者 for(int i=0;i<3;i++) {
new Thread(()->producer(),"producerThread" + i).start(); } // 消费者 for(int i=0;i<3;i++) {
new Thread(()->consumer(),"consumerThread" + i).start(); } } // 生产者 public static void producer() {
for(int i=0;i<100;i++) {
try {
queue.put("[" + i + "]"); System.out.println(Thread.currentThread().getName() + "->send msg" + i); } catch (InterruptedException e) {
// TODO Auto-generated catch block e.printStackTrace(); } } } // 消费者 public static void consumer() {
// 队列只要有数据就往走 while(true) {
try {
String msg = queue.take(); System.out.println(Thread.currentThread().getName()+"->receive msg:" + msg); }catch (InterruptedException e) {
// TODO: handle exception e.printStackTrace(); } } } }

在这里插入图片描述

在这里插入图片描述

转载地址:https://codingchaozhang.blog.csdn.net/article/details/115801928 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【多线程高并发】-多线程实现数组的读与写
下一篇:【多线程与高并发】-Java如何实现一个阻塞队列呢?

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月09日 05时51分58秒