使用java多线程,生成一个生产者线程,一个消费者线程,使两个线程完成同步进行生产和消费。(java)
时间: 2023-12-29 10:13:47 浏览: 89
好的,这是一个简单的生产者消费者模型的Java实现,使用synchronized和wait/notify方法实现线程同步。
```java
public class ProducerConsumerExample {
private static final int BUFFER_SIZE = 10;
private static int[] buffer = new int[BUFFER_SIZE];
private static int count = 0;
public static void main(String[] args) {
Thread producer = new Thread(new Producer());
Thread consumer = new Thread(new Consumer());
producer.start();
consumer.start();
}
static class Producer implements Runnable {
@Override
public void run() {
for (int i = 0; i < BUFFER_SIZE; i++) {
synchronized (this) {
while (count == BUFFER_SIZE) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
buffer[count++] = i;
System.out.println(Thread.currentThread().getName() + " produced " + i);
notify();
}
}
}
}
static class Consumer implements Runnable {
@Override
public void run() {
for (int i = 0; i < BUFFER_SIZE; i++) {
synchronized (this) {
while (count == 0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
int data = buffer[--count];
System.out.println(Thread.currentThread().getName() + " consumed " + data);
notify();
}
}
}
}
}
```
这个例子中,我们定义了一个缓冲区的大小(BUFFER_SIZE),一个缓冲区(buffer)和计数器(count)来记录缓冲区中的元素个数。然后我们定义了一个生产者线程(Producer)和一个消费者线程(Consumer),分别实现了Runnable接口。在run()方法中,我们使用synchronized关键字来保证线程同步。当缓冲区已满时,生产者线程会调用wait()方法等待,直到消费者线程消费一个元素并唤醒它。当缓冲区为空时,消费者线程会调用wait()方法等待,直到生产者线程生产一个元素并唤醒它。当生产者生产一个元素时,它会增加计数器并将元素添加到缓冲区中,然后通知消费者线程。当消费者消费一个元素时,它会减少计数器并从缓冲区中取出元素,然后通知生产者线程。这样,生产者和消费者线程就能同步进行生产和消费。
阅读全文