Witam uczę się wątków i napisałem sobie taką prostą symulacje:
package strzelcy;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Strzelec implements Runnable{
private int cel;
private int szybkosc;
private int przeladowanie;
private static int magazynek_max;
private int magazynek;
private int wynik;
private final String nazwa;
Strzelec(String nazwa, int cel, int szybkosc, int przeladowanie, int magazynek_max ){
this.nazwa=nazwa;
this.cel=cel;
this.szybkosc=szybkosc;
this.przeladowanie=przeladowanie;
Strzelec.magazynek_max=magazynek_max;
}
private void przeladuj(){
try {
magazynek=magazynek_max;
System.out.println("Strzelec "+nazwa+" przeładowuje magazynek");
Thread.sleep((int)(Math.random())*100+przeladowanie*100);
} catch (InterruptedException ex) {
Logger.getLogger(Strzelec.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void strzelaj(){
while(magazynek>0){
try {
magazynek--;
if(Math.random()*100<=cel) wynik++;
Thread.sleep((int)(Math.random())*10+szybkosc*100);
} catch (InterruptedException ex) {
Logger.getLogger(Strzelec.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
int wynik(){
return wynik;
}
private void przedstawsie(){
System.out.println("Nazwa: "+nazwa);
System.out.println("Celność: "+cel+"%");
System.out.println("Szybkość: "+szybkosc+" sekund");
System.out.println("Przeładowuje: "+przeladowanie+" sekund");
System.out.println("Pojemność broni: "+magazynek_max+" kul");
}
@Override
public void run(){
przedstawsie();
Thread.yield();
while(true) {
przeladuj();
Thread.yield();
strzelaj();
Thread.yield();
System.out.println("Strzelec "+nazwa+" ma wynik: "+wynik());
}
}
}
--------------------------------------------------------------------------------
package strzelcy;
public class Strzelcy {
public static void main(String[] args) {
// TODO code application logic here
Strzelec celny= new Strzelec("Celny",40, 2, 10, 15);
Strzelec szybki= new Strzelec("Szybki",20, 1, 10, 15);
Thread wątekcelny = new Thread(celny);
Thread wątekszybki = new Thread(szybki);
wątekcelny.run();
wątekszybki.run();
}
}
wynik jest następujący:
run:
Nazwa: Celny
Celność: 40%
Szybkość: 2 sekund
Przeładowuje: 10 sekund
Pojemność broni: 15 kul
Strzelec Celny przeładowuje magazynek
Strzelec Celny ma wynik: 6
Strzelec Celny przeładowuje magazynek
Strzelec Celny ma wynik: 12
Strzelec Celny przeładowuje magazynek
Strzelec Celny ma wynik: 16
Strzelec Celny przeładowuje magazynek
Strzelec Celny ma wynik: 25
Strzelec Celny przeładowuje magazynek
BUILD STOPPED (total time: 17 seconds)
Zupełnie nie wiem, czemu nie aktywuje wątku "szybki".