总共三个类,消费者、生产者、消息队列
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(); } }