生产者
class Producer extends Thread {
private Queue
消费者
class Consumer extends Thread {
private Queue queue;
private int maxSize;
public Consumer(Queue queue, int maxSize, String name) {
super(name);
this.queue = queue;
this.maxSize = maxSize;
}
@SneakyThrows
@Override
public void run() {
while (true) {
synchronized (queue) {
while (queue.isEmpty()) {
System.out.println("Queue is empty," + "Consumer thread is waiting" + " for producer thread to put something in queue");
try {
queue.wait();
} catch (Exception ex) {
ex.printStackTrace();
}
}
System.out.println("线程(" + Thread.currentThread().getName() + ")消费了一件商品: " + queue.remove() + ";当前剩余商品" + queue.size() + "个");
queue.notifyAll();
Thread.sleep(1000);
}
}
}
}
测试
import lombok.SneakyThrows;
import java.util.linkedList;
import java.util.Queue;
import java.util.Random;
public class ProducerConsumerInJava {
public static void main(String args[]) {
Queue queue = new linkedList();
Thread producer = new Producer(queue, 1, "producer");
Thread consumer1 = new Consumer(queue, 1, "consumer1");
Thread consumer2 = new Consumer(queue, 1, "consumer2");
Thread consumer3 = new Consumer(queue, 1, "consumer3");
Thread consumer4 = new Consumer(queue, 1, "consumer4");
producer.start();
consumer1.start();
consumer2.start();
consumer3.start();
consumer4.start();
}
}