public class ProducerConsumer {
public static void main(String[] args) {
Buffer buffer = new Buffer(5);
Producer[] pros = new Producer[5];
Consumer[] cons = new Consumer[2];
for(int i=0; i<pros.length; i++) {
pros[i] = new Producer("生产者" + i + "号", buffer);
new Thread(pros[i]).start();
}
for(int i=0; i<cons.length; i++) {
cons[i] = new Consumer("消费者" + i + "号", buffer);
new Thread(cons[i]).start();
}
}
}
class Message {
private int id = 0;
private static int nextId = 0;
Message() {
this.id = nextId;
if (nextId < Integer.MAX_VALUE) {
nextId++;
} else {
nextId = 0;
}
}
public String toString(){
return "Message(" + this.id + ")";
}
}
class Buffer {
private int index = 0;
private Message[] msgBuffer = null;
Buffer(int bufferSize) {
msgBuffer = new Message[bufferSize];
}
public synchronized void push(Message msg) {
while(index == msgBuffer.length) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notifyAll();
msgBuffer[index] = msg;
index++;
}
public synchronized Message pop() {
while(index == 0) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notifyAll();
index--;
return msgBuffer[index];
}
}
class Producer implements Runnable {
private String name = null;
private Buffer buffer = null;
Producer(String name, Buffer buffer) {
this.name = name;
this.buffer = buffer;
}
@Override
public void run() {
while(true) {
Message msg = new Message();
buffer.push(msg);
System.out.println(this.name + "生产了:" + msg);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable {
private String name = null;
private Buffer buffer = null;
Consumer(String name, Buffer buffer) {
this.name = name;
this.buffer = buffer;
}
@Override
public void run() {
while(true) {
Message msg = buffer.pop();
System.out.println("==============================" + this.name + "消费了:" + msg);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}java生产者消费者问题
最新推荐文章于 2025-03-26 00:15:00 发布
1779

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



