zmienna liczba wywołań programu

0
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.

0
  1. Nieskończona pętla w nieskończonej pętli?
  2. Metody Thread.start() w pętli na tych samych obiektach?
    Masz fantazję... :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1