import java.util.*;
class MySleep {
public static void sleep( int i ) {
try {
Thread.sleep( i );
}
catch ( InterruptedException e ) {}
}
}
class Gra{
int tab[];
Gra(){
tab = new int[10000];
for(int i = 0; i < 1000; ){
Random rn = new Random();
int r = rn.nextInt(10000);
if(tab[r] != 1){
tab[r] = 1;
i++;
}
}
}
synchronized public void sendNotificationToEveryone() { notifyAll(); }
}
class Gracz implements Runnable{
static int budzik = 0;
int tura = 0;
int punkty;
int tab[];
private Gra g;
Gracz(){
tab = new int[10000];
for(int i = 0; i < 10000; i++)
tab[i] = 0;
}
public void maszGre(Gra g) {this.g = g;};
synchronized public void run(){
while(true){
tura++;
System.out.println(tura);
Random rn = new Random();
synchronized(g){
//
// System.out.println("c");
int r = rn.nextInt(10000);
//System.out.println("c");
for(int j = 0; j < 1; ){
//System.out.println("c");
//System.out.println("c");
// System.out.println(tab[j]);
//System.out.println(tab[r]);
if(tab[r] == 0){
//System.out.println("r");
tab[r] = 99;
if(g.tab[r] == 1){
punkty++;
//System.out.println(punkty);
g.tab[r] = 0;
}
j++;
budzik++;
//System.
}
}
//if(budzik == 5){
//budzik = 0;
//notifyAll();
//}
try {
g.wait();
//Thread.sleep( 300 );
//notifyAll();
}
catch ( InterruptedException e ) {}
System.out.println( "To ja : " + Thread.currentThread().getName() + " Ktos mnie obudził." );
}
}
}
}
public class JavaApplication44 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Gra a = new Gra();
Gracz pierwszy = new Gracz();
pierwszy.maszGre(a);
Thread watekpierwszy = new Thread(pierwszy);
Gracz drugi = new Gracz();
drugi.maszGre(a);
Thread watekdrugi = new Thread(drugi);
Gracz trzeci = new Gracz();
trzeci.maszGre(a);
Thread watektrzeci = new Thread(trzeci);
Gracz czwarty = new Gracz();
czwarty.maszGre(a);
Thread watekczwarty = new Thread(czwarty);
Gracz piaty = new Gracz();
piaty.maszGre(a);
Thread watekpiaty = new Thread(piaty);
int numer = 0;
//while(true){
System.out.println("Nowa tura nr " + numer);
watekpierwszy.start();
watekdrugi.start();
watektrzeci.start();
watekczwarty.start();
watekpiaty.start();
numer++;
while(true){
//System.out.println("Statystyki:");
if(pierwszy.budzik == 5){
//System.out.println("Statystyki:");
pierwszy.budzik = 0;
a.sendNotificationToEveryone();
System.out.println("Statystyki:");
System.out.println("Pierwszy gracz" + pierwszy.punkty);
System.out.println("drugi gracz" + drugi.punkty);
System.out.println("trzeci gracz" + trzeci.punkty);
System.out.println("czwarty gracz" + czwarty.punkty);
System.out.println("piaty gracz" + piaty.punkty);
}
if((pierwszy.punkty >= 500) || (drugi.punkty >= 500) || (trzeci.punkty >= 500) || (czwarty.punkty >= 500) || (piaty.punkty >= 500)){
System.out.println("Statystyki:");
System.out.println("Pierwszy gracz" + pierwszy.punkty);
System.out.println("drugi gracz" + drugi.punkty);
System.out.println("trzeci gracz" + trzeci.punkty);
System.out.println("czwarty gracz" + czwarty.punkty);
System.out.println("piaty gracz" + piaty.punkty);
break;
}
if((pierwszy.punkty + drugi.punkty + trzeci.punkty + czwarty.punkty + piaty.punkty== 1000)){
System.out.println("Statystyki:");
System.out.println("Pierwszy gracz" + pierwszy.punkty);
System.out.println("drugi gracz" + drugi.punkty);
System.out.println("trzeci gracz" + trzeci.punkty);
System.out.println("czwarty gracz" + czwarty.punkty);
System.out.println("piaty gracz" + piaty.punkty);
break;
}
}
}
}
Niech mnie ktoś, oświeci dlaczego za każdym uruchomieniem program wykonuje zmienną liczbą pętli?
Generalnie chodzi o to że program wykona ileś tam pętli np. 36 i się zatrzymuje, tzn. tak jakby wszystkie wątki byłyby uśpione.