IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

la methode yield en java


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 262
    Par défaut la methode yield en java
    salut j'ai un petit exercice et je veux savoir comment se passe les chose
    voila le code compler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    import java.util.Random ;
    public class ThreadOrder {
      static int count=0;
      public static void main(String[] args) {
        Counter ct = new Counter();
        Tracker trk1 = new Tracker(ct, "thread one");
        Tracker trk2 = new Tracker(ct, "thread two");
        trk1.start();
        trk2.start();
      }
    }
    class Tracker extends Thread {
       Counter ct;
       String message;
       static private Random trueOrFalse = new Random() ;
       Tracker(Counter ct, String msg) {
         this.ct = ct;
         message = msg;
       }
       public void run() {
    	if (trueOrFalse.nextBoolean()) yield() ;
    	int count = ct.nextCounter() ;
    	if (trueOrFalse.nextBoolean()) yield() ;
         System.out.println(message+ " "+ count);
       }
     }
     class Counter {
       private int count=0;
       public int nextCounter() {
         synchronized(this) {
           count++;
           return count;
         }
       }
     }
    mes question:
    quand j'execute le programme j'ai deux resultats
    soit : thread one 2
    tread two 1

    ou tread two 1
    thread one 2

    alors que mois je crois y'a plus.
    pour l'objet ct y'a t il qu'un seul que les deux thread le modifie?
    pour cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (trueOrFalse.nextBoolean())
    .
    est ce qu'el dois etre true pour executer le code qui suit ou que ça soit true ou false??

  2. #2
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    j'a pas compris ta question mais je te rassures: le résultat de ce test est aléatoire.
    Yield demande à l'ordonnanceur de dégager mais celui-ci n'est pas forcé d'obéir... en plus les deux Threads partagent le même Random et là aussi plus rien n'est garanti au niveau de l'effet.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par momedalhouma Voir le message
    alors que mois je crois y'a plus.
    Oui, on peut aussi imaginer :

    tread two 2
    thread one 1

    thread one 1
    tread two 2
    Mais certains résultats aléatoires ont moins de chances d'apparaître que d'autres. Parfois, pour des raisons techniques, ces chances tombent à 0%.

    Le boulot des threads n'est pas de répartir des probabilité égales. Ça c'est le boulot d'un générateur aléatoire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Method IsReachable() pour java 1.4
    Par freestyle59 dans le forum Langage
    Réponses: 4
    Dernier message: 15/04/2009, 08h46
  2. Methodes systeme en JAVA
    Par scholes dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 12/08/2008, 13h15
  3. methode toString() en java
    Par dv-2008 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 30/04/2008, 09h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo