自己构架生产者消费者,一边生产一边消费:
package test;
import java.util.LinkedList;
import java.util.Queue;
/**
* @author: taibai
* @date:2019/10/24
*/
public class ProducerConsumerTest {
public static void main(String[] args) {
LinkedList<Integer> sharedQueue = new LinkedList<>();
Producer producer = new Producer(sharedQueue);
Consumer consumer = new Consumer(sharedQueue);
producer.start();
consumer.start();
}
}
class Producer extends Thread {
private static final int MAX_QUEUE_SIZE = 5;
private final Queue sharedQueue;
public Producer(Queue sharedQuque) {
// super();
this.sharedQueue = sharedQuque;
}
@Override
public void run() {
for(int i = 0;i<100;i++){
synchronized (sharedQueue){
while (sharedQueue.size()>=MAX_QUEUE_SIZE){
System.out.println("队列满了,等待消费");
try{
sharedQueue.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
sharedQueue.add(i);
System.out.println("进行生产:"+i);
sharedQueue.notify();
}
}
}
}
class Consumer extends Thread{
private final Queue sharedQueue;
public Consumer(Queue sharedQueue){
// super();
this.sharedQueue=sharedQueue;
}
@Override
public void run() {
while(true){
synchronized (sharedQueue){
while (sharedQueue.size()==0){
try{
System.out.println("队列空了,等待生产");
sharedQueue.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Object number = sharedQueue.poll();
System.out.println("进行消费:"+number);
sharedQueue.notify();
}
}
}
}