以下是生产者消费者问题的 Java 代码,采用了进程同步和互斥的技术:

import java.util.LinkedList;
import java.util.Queue;

public class ProducerConsumerExample {
    public static void main(String[] args) {
        Queue<Integer> buffer = new LinkedList<>();
        int maxSize = 10;
        Thread producer = new Producer(buffer, maxSize, "PRODUCER");
        Thread consumer = new Consumer(buffer, maxSize, "CONSUMER");

        producer.start();
        consumer.start();
    }
}

class Producer extends Thread {
    private Queue<Integer> buffer;
    private int maxSize;

    public Producer(Queue<Integer> buffer, int maxSize, String name) {
        super(name);
        this.buffer = buffer;
        this.maxSize = maxSize;
    }

    @Override
    public void run() {
        while (true) {
            synchronized (buffer) {
                while (buffer.size() == maxSize) {
                    try {
                        System.out.println("Queue is full, Producer thread is waiting for consumer to consume.");
                        buffer.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

                int number = (int) (Math.random() * 100);
                buffer.add(number);
                System.out.println("Produced " + number);
                buffer.notifyAll();
            }
        }
    }
}

class Consumer extends Thread {
    private Queue<Integer> buffer;
    private int maxSize;

    public Consumer(Queue<Integer> buffer, int maxSize, String name) {
        super(name);
        this.buffer = buffer;
        this.maxSize = maxSize;
    }

    @Override
    public void run() {
        while (true) {
            synchronized (buffer) {
                while (buffer.isEmpty()) {
                    try {
                        System.out.println("Queue is empty, Consumer thread is waiting for producer to produce.");
                        buffer.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

                int number = buffer.remove();
                System.out.println("Consumed " + number);
                buffer.notifyAll();
            }
        }
    }
}
Java 生产者消费者问题:线程同步与互斥实现

原文地址: https://www.cveoy.top/t/topic/nG3Q 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录