package sort;
import java.util.*;
public class ProducterAndConsumer {
private final int MAX_LEN = 10;
private volatile Queue<Integer> queue = new LinkedList<Integer>();
class Producer extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
synchronized (queue) {
System.out.println("生产者拿到锁");
while (queue.size() >= 1) {
queue.notify();
System.out.println("队列已经满了");
try {
queue.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
queue.add(1);
System.out.println("生产者当前的长度为" + queue.size());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
class Consumer extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
synchronized (queue) {
System.out.println("消费者拿到锁");
while (queue.size() == 0) {
queue.notify();
System.out.println("当前队列为空");
try {
queue.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
queue.poll();
System.out.println("消费者队列长度为" + queue.size());
try {
Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
}
}
}
}
}
public static void main(String[] args) {
ProducterAndConsumer psc = new ProducterAndConsumer();
Producer p = psc.new Producer();
Consumer c = psc.new Consumer();
p.start();
c.start();
}
}
本文介绍了一个使用Java实现的生产者消费者模式案例。通过一个固定大小的队列,生产者线程向队列中添加元素,而消费者线程从队列中移除元素。此模式利用了synchronized关键字和wait/notify机制来同步线程,确保队列不会溢出也不会下溢。

9549

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



