Java 生产者消费者问题:线程同步与互斥实现
以下是生产者消费者问题的 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();
}
}
}
}
原文地址: https://www.cveoy.top/t/topic/nG3Q 著作权归作者所有。请勿转载和采集!