rendered paste bodypackage lab4_2;
class ProducentWyj extends Thread
{
private Pudelko pudelka[] = new Pudelko[4];
private int m_nLiczba;
public ProducentWyj(Pudelko []c, int liczba)
{
for(int i=0; i<c.length; i++)
pudelka[i] = c[i];
this.m_nLiczba = liczba;
}
public void run()
{
for (int i = 0; i < 10; i++)
{
for(int j=0; j<4; j++)
{
pudelka[j].wloz(i);
System.out.println("Producent #" + this.m_nLiczba + " wlozyl: " + i + " do pudelka : "+j);
}
try{
sleep((int)(Math.random() * 500));
}
catch (InterruptedException e) { }
}
}
}
class ProducentWej extends Thread
{
private Pudelko pudelka[] = new Pudelko[4];
private int m_nLiczba;
public ProducentWej(Pudelko []c, int liczba)
{
for(int i=0; i<c.length; i++)
pudelka[i] = c[i];
this.m_nLiczba = liczba;
}
public void run()
{
for (int i = 0; i < 10; i++)
{
int wartosc;
for(int j=0; j<4; j++)
{
wartosc = pudelka[j].wez();
System.out.println("Producent #" + this.m_nLiczba + " otrzymal " + wartosc + "od konsumenta : "+j);
}
try
{
sleep((int)(Math.random() * 500));
}
catch (InterruptedException e) { }
}
}
}
class Konsument extends Thread
{
private Pudelko pudelko1,pudelko2;
private int m_nLiczba;
public Konsument(Pudelko c1, Pudelko c2, int Liczba)
{
pudelko1 = c1;
pudelko2 = c2;
this.m_nLiczba = Liczba;
}
public void run()
{
int wartosc = 0;
for (int i = 0; i < 10; i++)
{
wartosc = pudelko1.wez()*10;
System.out.println("Konsument #" + this.m_nLiczba + " wyjal: " + wartosc);
try{
sleep((int)(Math.random() * 500));
}
catch (InterruptedException e) { }
}
pudelko2.wloz(wartosc);
}
}
class Pudelko
{
private int m_nZawartosc; // to jest znienna warunkowa
// do której dost?p synchronizujemy, (omówione pó?niej)
private boolean m_bDostepne = false;
public synchronized int wez()
{
while (m_bDostepne == false)
{
try
{ wait(); }
catch (InterruptedException e) { }
}
m_bDostepne = false;
notifyAll();
return m_nZawartosc;
}
public synchronized void wloz(int wartosc)
{
while (m_bDostepne == true)
{
try
{
wait();
}
catch (InterruptedException e) { }
}
m_nZawartosc = wartosc;
m_bDostepne = true;
notifyAll();
}
}
class ProdKonsTest
{
public static void main(String[] args) throws Exception
{
Pudelko c1[] = new Pudelko[4];
Pudelko c2[] = new Pudelko[4];
for(int i=0; i<4; i++){
c1[i] = new Pudelko();
c2[i] = new Pudelko();
}
ProducentWyj p1 = new ProducentWyj(c1, 1);
ProducentWej p2 = new ProducentWej(c2, 2);
Konsument k1 = new Konsument(c1[0], c2[0], 0);
Konsument k2 = new Konsument(c1[1], c2[1], 1);
Konsument k3 = new Konsument(c1[2], c2[2], 2);
Konsument k4 = new Konsument(c1[3], c2[3], 3);
p1.start();
k1.start();
k2.start();
k3.start();
k4.start();
pauza();
}
static void pauza() throws java.io.IOException
{
System.out.println("Nacisnij Enter...");
System.in.read();
}
}