package com.test.thread; import com.sun.jmx.remote.internal.ArrayQueue; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class ProducerAndComsumer { public static void main(String[] args) { //生成一个容量为3的消息队列 MessageQueue queue=new MessageQueue(2); for (int i = 1; i <4 ; i++) { //创建三个生产者 int id=i; new Thread(new Runnable() { @Override public void run() { queue.put(new Message(id,"消息"+id)); } },"生产者"+i).start(); } new Thread(new Runnable() { @Override public void run() { try { while (true) { Thread.sleep(1000); queue.take(); } } catch (InterruptedException e) { e.printStackTrace(); } } },"消费者").start(); } } class MessageQueue{ //消息队列容量 private int captity; //消息队列 LinkedList<Message> queue=new LinkedList<>(); //从消息队列中存消息 public void put(Message message){ synchronized (queue) { while (queue.size() == captity) { try { System.out.println("消息队列已经满了,生产者不能放"); queue.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } queue.addLast(message); System.out.println("生产者生产了一个消息,放入队列"); queue.notifyAll(); } } //从消息队列拿消息 public Message take(){ synchronized (queue) { while (queue.isEmpty()) { try { System.out.println("消息队列为空,消费者不能消费"); queue.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } Message message = queue.removeFirst(); queue.notifyAll(); System.out.println("消费者从消息队列消费了一个消息"); return message; } } public MessageQueue(int captity) { this.captity = captity; } } class Message{ private int id; public Object value; public int getId() { return id; } public Object getValue() { return value; } public Message(int id, Object value) { this.id = id; this.value = value; } }
多线程生产者与消费
最新推荐文章于 2024-07-18 20:13:39 发布