import java.util.ArrayList;
import java.util.List;
public class ProAndCon {
static class Consumer implements Runnable{
private List<Integer> queue;
public Consumer(List<Integer> queue) {
this.queue = queue;
}
@Override
public void run() {
try {
while (true){
synchronized (queue){
while (queue.isEmpty()){
System.out.println("Queue is Empty");
queue.wait();
}
int i = queue.remove(0);
queue.notifyAll();
System.out.println(Thread.currentThread().getName() + " 消费了:" + i + "还剩:" + queue.size());
Thread.sleep(100);
}
}
}catch (Exception e){
e.printStackTrace();
}
}
}
static class Producer implements Runnable{
private List<Integer> queue;
private int length;
public Producer(List<Integer> queue, int length) {
this.queue = queue;
this.length = length;
}
@Override
public void run() {
try {
while (true){
synchronized (queue){
while(queue.size() >= length){
queue.wait();
}
queue.add(1);
System.out.println(Thread.currentThread().getName() + "生产了" + 1 + "现在有" + queue.size());
Thread.sleep(100);
queue.notifyAll();
}
}
}catch (Exception e){
e.printStackTrace();
}
}
}
public static void main(String[] args) {
List<Integer> queue = new ArrayList<>();
int length = 10;
Thread c1 = new Thread(new Consumer(queue));
Thread c2 = new Thread(new Consumer(queue));
Thread c3 = new Thread(new Consumer(queue));
Thread p1 = new Thread(new Producer(queue,length));
Thread p2 = new Thread(new Producer(queue,length));
Thread p3 = new Thread(new Producer(queue,length));
c1.setName("消费者1");
c2.setName("消费者2");
c3.setName("消费者3");
p1.setName("生产者1");
p2.setName("生产者2");
p3.setName("生产者3");
c1.start();
c2.start();
c3.start();
p1.start();
p2.start();
p3.start();
}
}
实现生产者消费者wait/notify
最新推荐文章于 2024-07-17 15:25:19 发布
本文介绍了一个基于Java实现的生产者-消费者模型示例。通过多线程技术模拟多个生产者和消费者之间的同步与异步交互过程,展示了如何使用队列进行资源的生产和消费,并通过synchronized关键字和wait/notify机制来协调生产者与消费者的行为。

1044

被折叠的 条评论
为什么被折叠?



