JAVA线程学习之生产者-消费者

本文介绍了一个基于Java的生产者消费者模式实现案例。通过MessageQueue类作为消息队列,MessageProducer类作为生产者不断地生成消息并加入队列,MessageConsumer类作为消费者从队列中取出并消费这些消息。该模式利用了线程同步机制确保生产和消费过程的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总共三个类,消费者、生产者、消息队列

import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; public class MessageQueue { private Queue<String> msgQueue = new ConcurrentLinkedQueue<String>(); public synchronized MessageQueue addMessage(String msg){ msgQueue.add(msg); notifyAll(); return this; } public synchronized String removeMessage(){ try { while(msgQueue.isEmpty()){ wait(); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return msgQueue.remove(); } }

public class MessageConsumer extends Thread { private MessageQueue queue ; public MessageConsumer(MessageQueue queue) { super(); this.queue = queue; } /** * 方法说明:MessageConsumer的主要工作 */ private void consumeMsg() { System.out.println("Consume the message [" + queue.removeMessage() + "]"); } @Override public void run() { try { while(true){ consumeMsg(); Thread.sleep(1000); } } catch (InterruptedException e) { e.printStackTrace(); } } }

public class MessageProducer extends Thread { private MessageQueue queue ; private int msgIndex = 0 ; public MessageProducer(MessageQueue queue) { super(); this.queue = queue; } @Override public void run() { try { while(true){ produceMsg(); Thread.sleep(1000); } } catch (InterruptedException e) { e.printStackTrace(); } } private void produceMsg() { String msg = "Msg in queue : " + msgIndex ++ ; queue.addMessage(msg); System.out.println("Produce new message [" + msg + "]"); } public static void main(String[] args) { MessageQueue msgQueue = new MessageQueue(); MessageConsumer consumer = new MessageConsumer(msgQueue); MessageProducer producer = new MessageProducer(msgQueue); consumer.start(); producer.start(); } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值