当先锋百科网

首页 1 2 3 4 5 6 7

在 Java 中,生产者-消费者模式是一种常见的同步多线程编程模式。在这个模式中,一个线程(生产者)负责生成数据,另一个线程(消费者)负责消费数据。数据在生产者和消费者之间通过一个缓存或队列进行传递。

下面是一种使用wait()notify()方法实现的生产者-消费者模式:

class Buffer {
private int data;
private boolean isEmpty = true;
public synchronized void produce(int newData) {
while (!isEmpty) {
try {
wait();
} catch (InterruptedException e) {}
}
data = newData;
isEmpty = false;
notify();
}
public synchronized int consume() {
while (isEmpty) {
try {
wait();
} catch (InterruptedException e) {}
}
int result = data;
isEmpty = true;
notify();
return result;
}
}
class Producer implements Runnable {
private Buffer buffer;
public Producer(Buffer buffer) {
this.buffer = buffer;
}
public void run() {
for (int i = 0; i< 10; i++) {
buffer.produce(i);
}
}
}
class Consumer implements Runnable {
private Buffer buffer;
public Consumer(Buffer buffer) {
this.buffer = buffer;
}
public void run() {
for (int i = 0; i< 10; i++) {
int data = buffer.consume();
System.out.println("Consumed " + data);
}
}
}
public class Main {
public static void main(String[] args) {
Buffer buffer = new Buffer();
Thread producerThread = new Thread(new Producer(buffer));
Thread consumerThread = new Thread(new Consumer(buffer));
producerThread.start();
consumerThread.start();
}
}

在这个实现中,生产者和消费者共享一个Buffer对象。当生产者调用produce方法时,如果缓冲区非空,生产者线程进入等待状态,直到缓冲区为空。当生产者放置数据并更新缓冲区状态后,它使用notify方法通知消费者线程。消费者线程在消费数据时采取类似的行动。