📄 main.java
字号:
package PC;import java.util.*;import java.io.*;import java.util.logging.Level;import java.util.logging.Logger;public class Main{ LinkedList bufferlist = new LinkedList(); int MAX = 10; boolean done = false; Random randno = new Random(); class Producer extends Thread { int det; public Producer(int pno) { det=pno; //System.out.println(det); } public void run() { while (true) { //generate odd number int value = randno.nextInt(39); value = (value % 2 == det) ? value + 1 : value; if(det==0) det = 2; synchronized(bufferlist) { while (bufferlist.size() == MAX) // queue "full" { System.out.println("Buffer full. Producer->"+det+" Waiting......."); try { bufferlist.wait(); } catch (InterruptedException ex) { System.out.println("PRODUCER INTERRUPTED"); Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } } bufferlist.addFirst(value);//add data bufferlist.notifyAll(); System.out.println("Producer->"+ det+" --- New item: " + value + " --- Node size: " + bufferlist.size()); try { this.sleep(randno.nextInt(10)); } catch (InterruptedException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } if (done) break; } } } } class Consumer extends Thread { int det, te; public Consumer(int pro) { det=pro; if(det==0) te =2; else te=1; } int value; public void run() { while (true) { synchronized(bufferlist) { while (bufferlist.size() == 0) { try { System.out.println("Buffer Empty. Consumer->"+te+" Waiting......."); bufferlist.wait(); } catch (InterruptedException ex) { System.out.println("CONSUMER INTERRUPTED"); } } String item=""; boolean tag=false; int count=bufferlist.size()-1; while(count>=0) { item = (String) bufferlist.get(count).toString(); value=Integer.parseInt(item); if(value%2==det) { bufferlist.remove(count); bufferlist.notifyAll(); tag=true; break; } count--; } // if(tag==true) { System.out.println("Consumer->"+te+" --- Delete item: " + item + " --- Buffer size: " + bufferlist.size()); } else { System.out.println("Consumer->"+te+" didn't found any even data."); } try { this.sleep(randno.nextInt(20)); } catch (InterruptedException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } if (done) break; } } } } void init() { int i; for(i=1;i<=4;i++) { int value = randno.nextInt(40); bufferlist.addFirst(value); } } public static void main(String[] args) throws IOException, InterruptedException { Main run = new Main(); run.init(); run.new Producer(1).start(); run.new Producer(0).start(); run.new Consumer(1).start(); run.new Consumer(0).start(); //time limit Thread.sleep(5*1000); //shut down all process gracefully synchronized(run.bufferlist) { run.done = true; run.bufferlist.notifyAll(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -