⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.java

📁 Producer Consumer Algorithm Implement by Java
💻 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 + -