Bonjour à tous,
j'ai un petit programme qui consiste à retirer ou déposer une certaine somme d'argent sur un compte en banque
je ne peux retirer que si le solde est positif.
alors j'ai essayé d'utiliser la méthode wait() comme ceci:
tant que le solde est négatif, alors wait()
mais je ne sait pas comment introduire la méthode notify() et je ne comrends pas comment l'utiliser en fait, alors si quelqu'un parmi vous vous peut m'expliquer à quoi elle sert , autre chose:dans mon code, je met le solde initial à -10, et j'essai de retirer 2 et de deposer 2 dix fois de suite,
logiquement je devrai avoir 10 incrémentation de 2 et le solde sera donc 0, mais ce n'est pas ce que la console affiche:
etat du thread t NEW
etat du thread t RUNNABLE (cette partie en bleue devrai s'afficheé à la fin!!!!!!!!!!!!!)
priorité de : Thread-1:5
priorité de: Thread-0:5
priorite du thread principale: 5
solde final: -10
Solde après le dépot: -8
Solde après le dépot: -6
autre question: comme j'ai mis t.join() et t2.join() alors l'affichage du thread principale(la methode main()) devrai s'afficher à la fin sur ma console, ce qui n'est pas le cas!!, ?
merci de me répondre
voici le code:.
package
Theread;import
java.util.PriorityQueue;public
class RunImpl implements Runnable {private CompteEnBanque cb;private String name;public RunImpl(CompteEnBanque cb, String name){this.cb = cb;this.name = name;}
public
void run(){for(int i = 0; i<10; i++){cb.deposerArgent(2);cb.retraitArgent(2);}
}
publicstaticvoid main(String[] args) {CompteEnBanque cb =
new CompteEnBanque();Thread t2 =
new Thread(new RunImpl(cb, "ZérO"));Thread t =
new Thread(new RunImpl(cb, "Cysboy"));try {t2.join();
t.join();
}
catch (InterruptedException e1) {// TODO Auto-generated catch blocke1.printStackTrace();
}
System.
out.println("etat du thread t "+t.getState());t.start();
System.
out.println("etat du thread t "+t.getState());t2.start();
System.
out.println( "priorité de : "+ t.getName()+":"+t.getPriority());System.
out.println( "priorité de: "+ t2.getName()+":"+t2.getPriority()); System.
out.println("priorite du thread principale: "+ Thread.currentThread().getPriority());System.
out.println("solde final: "+cb.getSolde());}
}
package
Theread;public
class CompteEnBanque {privatestaticintsolde = -10;publicint getSolde(){returnthis.solde;}
publicsynchronizedvoid retraitArgent(int retrait){
while(solde<=0){try {wait();
}
catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();
System.
out.println("j'atends plus!");}
}
solde = solde - retrait; System.
out.println("Solde après le retrait: " + solde);notify();
}
publicsynchronizedvoid deposerArgent(int montant){solde=solde+montant;System.
out.println("Solde après le dépot: " + solde);notify();
}
}