packagecn.Douzi.ProductConsume;importjava.util.LinkedList;importjava.util.Queue;importjava.util.Scanner;public classProCon {static int LEN = 3;static public int PROTIME = 1500;static public int CONTIME = 1000;static public int totalData = 1000;static public Queue buffer = new LinkedList<>();static public Buffer empty = new Buffer(0, 10);static public Mutex mutex = new Mutex(1);publicProCon() {
}public static voidmain(String[] args) {//TODO Auto-generated method stub
System.out.println("|-----------------------------------------------------------|");
System.out.println("| |");
System.out.println("| Welcome to My System ! |");
System.out.println("| ↖ By Douzi 2017 ↗ |");
System.out.println("| 生产消费开始进行 |");
System.out.println("| |");
System.out.println("|-----------------------------------------------------------|\n");
Scanner scaner= newScanner(System.in);
System.out.println("设置缓冲区大小: ");
LEN=scaner.nextInt();
System.out.println("缓冲区大小: " + LEN + "\n");
System.out.println("设置生产休眠时间: ");
ProCon.PROTIME=scaner.nextInt();
System.out.println("设置消费休眠时间: ");
ProCon.CONTIME=scaner.nextInt();
ProductWindows pro= newProductWindows();
ConsumeWindows con= newConsumeWindows();
Thread t1= newThread(pro);
Thread t2= newThread(con);
t1.start(); t2.start();
}
}class ProductWindows implementsRunnable {publicProductWindows() {
}
@Overridepublic voidrun() {//TODO Auto-generated method stub
while (true) {try{
Thread.sleep(ProCon.PROTIME);
}catch(InterruptedException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
ProCon.totalData++;
System.out.println("生产数据:" +ProCon.totalData);if (ProCon.buffer.size()
ProCon.buffer.add(newData(ProCon.totalData));
System.out.println("将数据: " + ProCon.totalData + " 放入缓冲区");
System.out.println("此时缓冲区大小: " + ProCon.buffer.size() + "\n");
}
}else{
System.out.println("缓冲区满,等待数据取出缓冲区.....................\n");
ConsumeWindows con= newConsumeWindows();
Thread t2= newThread(con);
t2.start();break;
}
}
}
}class ConsumeWindows implementsRunnable {
@Overridepublic voidrun() {//TODO Auto-generated method stub//System.out.println("Test");
while (true) {
Data d= new Data(0);try{
Thread.sleep(ProCon.CONTIME);
}catch(InterruptedException e) {//TODO Auto-generated catch block
e.printStackTrace();
}if (ProCon.buffer.size() > 0) {synchronized(ProCon.mutex) {
d=ProCon.buffer.peek(); ProCon.buffer.poll();
System.out.println("从缓冲区取出数据: " +d.getData());
}
}else{
System.out.println("缓冲区空,等待数据放入缓冲区..................\n");
ProductWindows pro= newProductWindows();
Thread t1= newThread(pro);
t1.start();break;
}
System.out.println("消费数据: " + d.getData() + "\n");
}
}
}classData {private intdata;public Data(intdata) {super();this.data =data;
}public intgetData() {returndata;
}
}classMutex {private intmutex;public Mutex(intmutex) {super();this.mutex =mutex;
}
}classBuffer {private intfull;private intempty;public Buffer(int full, intempty) {super();this.full =full;this.empty =empty;
}
}