java实现消费者与生产者队列

时间:2020-12-16 17:39:51
package test;

import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


public class Test{
static Scanner sc = new Scanner(System.in);
static String line;
static int Max = 10;//最大食物数
static int count = 0;//食物队列尾号
static Food[] foodlist = new Food[Max];//食物队列

static class Food{
static int id = 0;
private int mid = id++;
public Food() {

}

@Override
public String toString() {
return "食物id="+mid;
}
}
static Food f = null;
static class Producer implements Runnable{
@Override
public void run() {
while(!Thread.interrupted()){
if(count==10){
synchronized (this) {
while(count==10){
System.out.println("满了");
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
synchronized (c) {
System.out.println("生产");
foodlist[count] = new Food();
count++;
c.notifyAll();
}
}
}
}

static class Comsumer implements Runnable{
@Override
public void run() {
while(!Thread.interrupted()){
if(count==0){
synchronized (this) {
while(count==0){
System.out.println("没了");
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
synchronized (p) {
System.out.println("消费"+foodlist[count-1]);
foodlist[count-1] = null;
count--;
p.notifyAll();
}
}
}
}

static Producer p = new Producer();
static Comsumer c = new Comsumer();
public static void main(String[] args) {
ExecutorService exe = Executors.newCachedThreadPool();
exe.execute(p);
exe.execute(c);
}
}