Witam,
Dostałem na uczelni temat mini projektu, który jest następujący:
- Bank – naliczanie odsetek lokat
a. klienci to wątki wykonujące w pętli:
i. pracują (sleep(losowa wartość))
ii. wpłacają na lokatę losową kwotę
iii. pracują (sleep(losowa wartość))
iv. sprawdza stan konta
b. bank to jeden wątek, który co stały czas, przegląda wszystkie konta i nalicza
odsetki lokat
Problem polega na tym ze nie do końca wiem jak to ugryźć. Moja próba rozwiązania problemu:
package bank;
import java.util.concurrent.TimeUnit;
public class Klient extends Thread {
private Lokaty nazwa;
private boolean praca = false;
public double k;
private static int threadCount = 0;
private String name;
/* public void stop(){
praca = true;
} */
public Klient(Lokaty nazwa){
this.nazwa = nazwa;
}
public void wplac(){
k = (nazwa.generator.nextDouble()*10);
nazwa.stanKontaBezOdsetek = nazwa.stanKontaBezOdsetek + k;
System.out.println(getName() + " wplacilem " + k);
System.out.println(getName() + " Stan konta po wplacie: " + nazwa.stanKontaBezOdsetek);
nazwa.wplata = true;
}
public void pracuj(){
System.out.println("pracuje");
try {
Thread.sleep(nazwa.generator.nextInt(10000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void run(){
while (!Thread.interrupted()){
pracuj();
wplac();
pracuj();
}
}
}
package bank;
import java.util.Random;
import java.util.concurrent.TimeUnit;
public class Lokaty {
private double k;
public boolean wplata = false;
Random generator = new Random();
public static double stanKontaBezOdsetek;
public static double stanKontaZOdsetkami;
}
package bank;
public class Bank implements Runnable {
private Lokaty lokaty;
//private boolean praca = false;
public Bank(Lokaty lokaty){
this.lokaty = lokaty;
}
public void run(){
while (!Thread.interrupted()){
//lokaty.doliczOdsetki();
}
}
}
Niestety, z powodu mojego braku zrozumienia, 2 klientów pracuje na jednej lokacie, co jest efektem niepożądanym. Bardzo prosiłbym o pomoc w naprawieniu tego problemu, bądź nakreślenie czy ten sposób w ogóle ma sens.