Producer Consumer
I try this code
publicclass ProducerConsumerTest{
publicstaticvoid main(String[] args){
CubbyHole c =new CubbyHole();
Producer p1 =new Producer(c, 1);
Consumer c1 =new Consumer(c, 1);
p1.start();
c1.start();
}
}
class CubbyHole{
privateint contents;
privatevolatileboolean available =false;
publicsynchronizedint get(){
while (available ==false){
try{
wait();
}catch (InterruptedException e){
}
}
available =false;
notify();
return contents;
}
publicsynchronizedvoid put(int value){
while (available ==true){
try{
wait();
}catch (InterruptedException e){
}
}
contents = value;
available =true;
notify();
}
}
class Consumerextends Thread{
private CubbyHole cubbyhole;
privateint number;
public Consumer(CubbyHole c,int number){
cubbyhole = c;
this.number = number;
}
publicvoid run(){
int value = 0;
for (int i = 0; i < 10; i++){
value = cubbyhole.get();
System.out.println("Consumer #" + this.number +" got: " + value);
}
}
}
class Producerextends Thread{
private CubbyHole cubbyhole;
privateint number;
public Producer(CubbyHole c,int number){
cubbyhole = c;
this.number = number;
}
publicvoid run(){
for (int i = 0; i < 10; i++){
cubbyhole.put(i);
System.out.println("Producer #" + this.number +" put: " + i);
try{
sleep((int) (Math.random() * 100));
}catch (InterruptedException e){
}
}
}
}
from this link http://www.java2s.com/Code/Java/Threads/ProducerConsumerTest.htm
but, why can I get this result?
Producer #1 put: 0
Consumer #1 got: 0
Consumer #1 got: 1
Producer #1 put: 1
Consumer #1 got: 2
Producer #1 put: 2
Consumer #1 got: 3
Producer #1 put: 3
Producer #1 put: 4
Consumer #1 got: 4
Consumer #1 got: 5
Producer #1 put: 5
Consumer #1 got: 6
Producer #1 put: 6
Consumer #1 got: 7
Producer #1 put: 7
Consumer #1 got: 8
Producer #1 put: 8
Consumer #1 got: 9
Producer #1 put: 9
somebody can explain it to me?
if I set the priority higher in Producer, I get the right answer.
thanks

