【多线程高并发】-Java使用阻塞队列ArrayBlockingQueue实现生产者消费者模式?

2021/4/17 22:25:57

本文主要是介绍【多线程高并发】-Java使用阻塞队列ArrayBlockingQueue实现生产者消费者模式?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

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

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

  • 生产者往队列里面放东西;
  • 消费者从队列里面取东西;
package com.lcz.tencent.thread;

import java.util.concurrent.ArrayBlockingQueue;

// 阻塞队列实现多线程下的生产者和消费者模式
public class ArrayBlockQueueDemo {
	static ArrayBlockingQueue<String> 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();
			}
		}
	}
	
}

在这里插入图片描述
在这里插入图片描述



这篇关于【多线程高并发】-Java使用阻塞队列ArrayBlockingQueue实现生产者消费者模式?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程