multithreading - What is wrong with this implementation of Producer Consumer in java? -


i have implemented classic producer/consumer problem, using shared buffer class.

for reason not getting correct sequence of outputs.

i have tried many times, not spot flaw, can please point out mistake?

public class bufferprodcons {      boolean produced = false;      int data;      public synchronized void producedata(int d) {          while (produced) {              try {                 wait();             } catch (interruptedexception ie) {                 ie.printstacktrace();             }         }      //  system.out.println("data produced");         data = d;         produced = true;         this.notify();     }      public synchronized int consumedata() {         while (!produced) {              try {                 wait();             } catch (interruptedexception ie) {                 ie.printstacktrace();             }         }      //  system.out.println("data consumed");         int d =data;         produced = false;         this.notify();         return d;     } }  public class consumer extends thread {      bufferprodcons buffer ;     consumer(bufferprodcons buf){         buffer =  buf;     }       public void run(){         (int =0;i<10;i++){             int d=buffer.consumedata();             system.out.println("consumed data "+d);             try {                 thread.sleep(300);             } catch (interruptedexception e) {                 // todo auto-generated catch block                 e.printstacktrace();             }         }     }  }  public class producer extends thread {      bufferprodcons buffer;      producer(bufferprodcons buf){         buffer = buf;     }      @override     public void run(){         for(int i=0;i<10;i++){             system.out.println("produced "+i);             buffer.producedata(i);             try {                 thread.sleep(200);             } catch (interruptedexception e) {                 // todo auto-generated catch block                 e.printstacktrace();             }         }     } }  public class mainprodcons {      public static void main(string[] args) {           bufferprodcons  buffer = new bufferprodcons();          thread t1 = new producer(buffer);         thread t2 = new consumer(buffer);          t1.start();t2.start();     }  } 

sample output

produced 0 consumed data 0 produced 1 consumed data 1 produced 2 produced 3 consumed data 2 produced 4 consumed data 3 produced 5 consumed data 4 produced 6 consumed data 5 produced 7 consumed data 6 produced 8 consumed data 7 produced 9 consumed data 8 consumed data 9 

my understanding , sequence of producer , consumer lines should alternate, can see appear in succession.


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -