TP N°4
TP N°4
TP N°4
Exercice 2 :
Ci-dessous 2 classes Compte (correspond un compte bancaire) et Operation (thread qui
effectue des oprations sur un compte bancaire).
Problme :
Operation effectue des oprations qui devraient laisser le solde du compte inchang, et pourtant,
aprs un moment, le solde ne reste pas 0.
1- Modifiez le code pour empcher ce problme.
2- Dans le code de la classe Operation, remplacez l'opration nulle par 2 oprations ajouter et
retirer qui devraient elles aussi laisser le solde du compte 0 (elles sont en commentaire dans le
code). Lancez l'excution et constatez le problme. Modifiez le code pour que a marche.
public class Compte {
private int solde = 0;
public void ajouter(int somme) {
solde += somme;
System.out.print(" ajoute " + somme);
}
public void retirer(int somme) {
solde -= somme;
System.out.print(" retire " + somme);
}
public void operationNulle(int somme) {
solde += somme;
System.out.print(" ajoute " + somme);
Said EL KAFHALI
Page 1/2
solde -= somme;
System.out.print(" retire " + somme);
}
public int getSolde() {
return solde;
}
}
public class Operation extends Thread {
private Compte compte;
public Operation(String nom, Compte compte) {
super(nom);
this.compte = compte;
}
public void run() {
while (true) {
int i = (int) (Math.random() * 10000);
String nom = getName();
System.out.print(nom);
//
compte.ajouter(i);
//
compte.retirer(i);
compte.operationNulle(i);
int solde = compte.getSolde();
System.out.print(nom);
if (solde != 0) {
System.out.println(nom + ":**solde=" + solde);
System.exit(1);
}
}
}
public static void main(String[] args) {
Compte compte = new Compte();
for (int i = 0; i < 20; i++) {
Operation operation = new Operation("" + (char)('A' +
i), compte);
operation.start();
}
}
}
Said EL KAFHALI
Page 2/2