生产者与消费者
程序员文章站
2022-05-11 19:20:37
...
import java.util.LinkedList; import java.util.Queue; import java.util.Random; public class ProducerConsumerInJava { public static void main(String args[]) { System.out.println("在Java中如何使用wait和notify!!!"); System.out.println("解决生产者消费者问题!!!"); Queue<Integer> buffer = new LinkedList<>(); int maxSize = 3; Thread consumer = new Consumer(buffer, maxSize, "消费者"); Thread producer = new Producer(buffer, maxSize, "生产者"); producer.start(); consumer.start(); } } class Producer extends Thread { private Queue<Integer> queue; private int maxSize; public Producer(Queue<Integer> queue, int maxSize, String name) { super(name); this.queue = queue; this.maxSize = maxSize; } @Override public void run() { while (true) { synchronized (queue) { while (queue.size() == maxSize) { try { System.out.println( "Queue已经满了, Producer thread waiting for consumer to take something from queue"); queue.wait(); } catch (Exception ex) { ex.printStackTrace(); } } Random random = new Random(); int i = random.nextInt(); System.out.println("Producing value : " + i); queue.add(i); queue.notifyAll(); } } } } class Consumer extends Thread { private Queue<Integer> queue; private int maxSize; public Consumer(Queue<Integer> queue, int maxSize, String name) { super(name); this.queue = queue; this.maxSize = maxSize; } @Override public void run() { while (true) { synchronized (queue) { while (queue.isEmpty()) { System.out.println( "Queue 为空, Consumer thread is waiting for producer thread to put something in queue"); try { queue.wait(); } catch (Exception ex) { ex.printStackTrace(); } } System.out.println("Consuming value : " + queue.remove()); queue.notifyAll(); } } } }