【多线程高并发】-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实现生产者消费者模式?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-04TiDB 资源管控的对撞测试以及最佳实践架构
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现