在Java中,可以使用wait()
和notify()
或notifyAll()
方法来实现生产者-消费者模式。这些方法是Object
类的一部分,用于线程间的通信。下面是一个简单的生产者-消费者模式示例:
public class Buffer {
private int data;
private boolean empty = true;
public synchronized void put(int data) {
while (!empty) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.data = data;
empty = false;
notifyAll();
}
public synchronized int get() {
while (empty) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
empty = true;
notifyAll();
return data;
}
}
public class Producer implements Runnable {
private Buffer buffer;
public Producer(Buffer buffer) {
this.buffer = buffer;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("Produced: " + i);
buffer.put(i);
}
}
}
public class Consumer implements Runnable {
private Buffer buffer;
public Consumer(Buffer buffer) {
this.buffer = buffer;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
int data = buffer.get();
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();
}
}
运行上述代码,你将看到生产者和消费者线程交替执行,生产者将数据放入缓冲区,消费者从缓冲区中取出数据。这就是一个简单的生产者-消费者模式实现。