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

avec Java Discussion :

Thread runnable et blocked


Sujet :

avec Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut Thread runnable et blocked
    Bonjour,
    j'ai essayé ce prg suivante,quand je l'exécute,j'ai un pb avec son output
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
     
    public class TestThread extends Thread
    {
    Thread t;
    public TestThread(String name)
    {
    super(name);
    System.out.println("status du thread"+name+"="+this.getState());
    this.start();
    System.out.println("status du thread"+name+"="+this.getState());
    }
    public TestThread(String name,Thread t)
    {
    super(name);
    this.t=t;
    System.out.println("status du thread"+name+"="+this.getState());
    this.start();
    System.out.println("status du thread"+name+"="+this.getState());
    }
    public void run()
    {
    for(int i=0;i<10;i++)
    {
    System.out.println("status"+this.getName()+"="+this.getState());
    if(t!=null)System.out.println("status de"+t.getName()+" pendant le thread"+this.getName()+"="+this.getState());
    }
    }
    public void setThread(Thread t)
    {
    this.t=t;
    }
    }
     
    public class Test 
    {
    public static void main(String[]args)
    {
    TestThread t=new TestThread("A");
    TestThread t2=new TestThread("B",t);
    try
    {
    Thread.sleep(1000);
    }
    catch(InterruptedException e)
    {
    e.printStackTrace();
    }
    System.out.println("statut du thread"+t.getName()+"="+t.getState());
    System.out.println("statut du thread"+t2.getName()+"="+t2.getState());
    }
    }
    voilà son output
    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
    36
    37
     
    status du threadA=NEW
    status du threadA=RUNNABLE
    status du threadB=NEW
    status du threadB=RUNNABLE
    statusA=RUNNABLE
    statusA=RUNNABLE
    statusA=RUNNABLE
    statusA=RUNNABLE
    statusB=RUNNABLE
    status deApendant le threadB=RUNNABLE
    statusB=RUNNABLE
    statusA=RUNNABLE
    status deApendant le threadB=RUNNABLE
    statusB=RUNNABLE
    status deApendant le threadB=RUNNABLE
    statusA=RUNNABLE
    statusB=RUNNABLE
    statusA=RUNNABLE
    statusA=RUNNABLE
    status deApendant le threadB=RUNNABLE
    statusA=RUNNABLE
    statusB=RUNNABLE
    statusA=RUNNABLE
    status deA pendant le threadB=RUNNABLE
    statusB=RUNNABLE
    status deA pendant le threadB=RUNNABLE
    statusB=RUNNABLE
    status deA pendant le threadB=RUNNABLE
    statusB=RUNNABLE
    status deA pendant le threadB=RUNNABLE
    statusB=RUNNABLE
    status deA pendant le threadB=RUNNABLE
    statusB=RUNNABLE
    status deA pendant le threadB=RUNNABLE
    statut du threadA=TERMINATED
    statut du threadB=TERMINATED
    mon question est pourquoi je n'ai pas réussi avoir blocked
    par ex:
    status de B=RUNNABLE
    status de A pendant le thread B=BLOCKED
    Veuillez m'aidez svp

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Ben c'est normal, la doc dit que le thread est BLOCKED lorsqu'il attend d'obtenir un lock d'un bloc synchronized...

    Il n'y a rien de tout cela dans ton code.


    a++

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    merci pour votre aide;
    pourtant il y a un sleep dans le prg

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par domxaline Voir le message
    pourtant il y a un sleep dans le prg
    sleep() fait rentrer le Thread dans l'état TIMED_WAITING et non pas BLOCKED...

    Mais de toute manière ce sleep() n'est pas effectué par ton thread mais par le thread principale...



    a++

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    En fait BLOCKED pourrait arriver quand B demande l'état de A, puisque l'accès à println() est certainement synchronisé, et donc que les threads doivent en principe se disputer le lock.

    Mais vu que c'est B qui demande à A quel est son état, à un moment où B n'est pas en train de retenir le lock, se serait un peu ridicule que A se prétende bloqué à ce moment-là... En théorie ça peut arriver, en pratique ça me semble dur à atteindre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    merci beaucoup

Discussions similaires

  1. Réponses: 11
    Dernier message: 02/08/2007, 15h07
  2. Thread : class Thread VS. interface Runnable
    Par shawty dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 11/03/2007, 21h09
  3. [Thread] runnable ou thread
    Par dark2 dans le forum Général Java
    Réponses: 1
    Dernier message: 18/12/2006, 17h07
  4. [Thread]Runnable ==> 2 thread différents
    Par PoZZyX dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 31/03/2006, 13h09
  5. Thread avec Implements Runnable
    Par pier* dans le forum Java ME
    Réponses: 1
    Dernier message: 26/02/2006, 22h46

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