begin process at 2010 02 10 01:54:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Divers

 > 

Débutant(e)

 > 

Thread


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Thread

dimanche 5 avril 2009 à 19:55:36 | Thread

limalima

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 block

e1.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 block

e.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();

}

}

lundi 6 avril 2009 à 21:49:16 | Re : Thread

uhrand

Un "join" n'a de sens que si le Thread en question est déja démarré!
J'ai modifié un peu le scénario: le premier Thread ("Zero") veut faire un retrait d'argent pendant que l'autre Thread ("Cysboy") dépose de l'argent. Lorsque "Cysboy" a déposé assez d'argent, "Zero" réussi effectivement son retrait:

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() {
        if (name.equalsIgnoreCase("zero")) {
            cb.retraitArgent(2);
        } else {
            for (int i = 0; i < 10; i++) {
                cb.deposerArgent(2);
            }
        }
    }
    public static void main(String[] args) {
        CompteEnBanque cb = new CompteEnBanque();
        Thread t2 = new Thread(new RunImpl(cb, "Zero"));
        Thread t = new Thread(new RunImpl(cb, "Cysboy"));
        System.out.println("etat du thread t " + t.getState());
        t.start();
        System.out.println("etat du thread t " + t.getState());
        t2.start();
        try {
            t2.join();
            t.join();
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }
        System.out.println("priorite de : " + t.getName() + ":" + t.getPriority());
        System.out.println("priorite de: " + t2.getName() + ":" + t2.getPriority());
        System.out.println("priorite du thread principale: " + Thread.currentThread().getPriority());
        System.out.println("solde final: " + cb.getSolde());
    }
}
class CompteEnBanque {
    private static int solde = -10;
    public int getSolde() {
        return CompteEnBanque.solde;
    }
    public synchronized void retraitArgent(int retrait) {
        while (solde <= 0) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
                System.out.println("j'atends plus!");
            }
        }
        solde = solde - retrait;
        System.out.println("Solde apres le retrait: " + solde);
        notify();
    }
    public synchronized void deposerArgent(int montant) {
        solde = solde + montant;
        System.out.println("Solde apres le depot: " + solde);
        notify();
    }
}


Cette discussion est classée dans : system, out, thread, cb, solde


Répondre à ce message

Sujets en rapport avec ce message

utilisation java.awt.Robot [ par umafaid ] Bonjour, j'utilise la classe Robot pour me déplacer automatiquement sur un panel. Mais j'aimerais que le robot s'arrête au clic de l'utilisateur et Conversion UTF-8 vers ISO [ par flexx ] Bonjour Dans une application, je reçois une chaine de caractère avec pour entete 0x15 0xC0, visiblement encodé en UTF-8 puisque lorsque j'affiche la v La méthode appelée fonctionne sans argument mais ne fonctionne pas avec les arguments [ par daviddubois ] Bonjour tout le monde,Je recherche une partie de phrase dans un fichier txt.Si cette partie de phrase existe, i est incrémenté de 1 autrement i ne bou Je n'arrive pas à ajouter un nombre dans un fichier RandomAccessFile [ par daviddubois ] Bonjour tout le monde,J'ai un petit problème avec un RandomAccessFile et je pense pourtant faire ce que je dois faire.Le but de mon exercice est de re Urgent svp un probleme de trie!!!! [ par wissal04 ] avant de commencer bsr a tous,j'ai un probleme de tri,j'ai fais un tableau a une seul dimenssion et je voudrais le trié avant d'afficher son contenue problème bloc try-catch dans code [ par little pepito ] Bonjour, J'ai un petit problème dans une méthode run en cours de développement.Je voudrais insérer 2blocs try-catch dans un autre bloc try-catch(qui l Programmation proxy [ par un_fou_de_java ] Bonjour,je suis etudiant en 3ème année de licence a Jussieu. Je suis actuellement en stage et on m'a demandé de programmer un proxy en java ( le serve probléme d'execution [ par itafomis ] bonjour tout le monde.je veux me connecter a une base de donnée sql 2000 a partir d'eclipse et voila le code que j'ai utiliséimport java.*;<font color ajout dans un tableau en java [ par samanona ] slt, j'ai un probleme au java et j'aimerai le resoudre  voila la methode que j'ai ecrit: String tab[][]=new String[80][4];Scanner s=new Scanner(Syst class loadClass et class loader [ par fatalpicard ] Bonjour,J'ai un problème avec méthode loadClass, j'essaye de récupérer ma classe ImporManager depuis le classe loader (la classe se situe dans le même


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,250 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales