public class ConsumeInteger extends Thread
{
private HoldIntegerUnsynchronized cHold;
public ConsumeInteger(HoldIntegerUnsynchronized h)
{
super("ConsumeInteger ");
cHold=h;
}
public void run()
{
int val,sum=0;
do
{
try
{
Thread.sleep((int)(Math.random()*10000));
}
catch(InterruptedException e)
{
System.err.println(e.toString());
}
val=cHold.getSharedInt();
sum+=val;
}while(val!=10);
System.err.println(getName()+
"retrieved values totaling:"+sum+
"\nTerminating"+getName());
}
}
public class HoldIntegerUnsynchronized
{
private int sharedInt=-1;
public void setSharedInt(int val)
{
System.err.println(Thread.currentThread().getName()+
"setting sharedInt to"+val);
sharedInt=val;
}
public int getSharedInt()
{
System.err.println(Thread.currentThread().getName()+
"retrieving sharedInt values"+sharedInt);
return sharedInt;
}
}
public class ProduceInteger extends Thread
{
private HoldIntegerUnsynchronized pHold;
public ProduceInteger(HoldIntegerUnsynchronized h)
{
super("ProduceInteger ");
pHold=h;
}
public void run()
{
for(int count=1;count<=10;count++)
{
try
{
Thread.sleep((int)(Math.random()*10000));
}
catch(InterruptedException e)
{
System.err.println(e.toString());
}
pHold.setSharedInt(count);
}
System.err.println(getName()+"finished producting values"+
"\nTerminating"+getName());
}
}
public class SharedCell
{
public static void main(String[] args)
{
HoldIntegerUnsynchronized h=new HoldIntegerUnsynchronized();
ProduceInteger p=new ProduceInteger(h);
ConsumeInteger c=new ConsumeInteger(h);
p.start();
c.start();
}
}