Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1756 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  problème de Thread java

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème de Thread java

n°2035005
isaac76
Posté le 09-11-2010 à 15:58:30  profilanswer
 

Bonjour
j'apprend le java en autodidacte (novice) et je me retrouve confronté à un problème de Thread.
j'ai choisi d'implémenté une interface graphique en Java, malheureusement celle-ci se fige lorsque que le temps de traitement d'une méthode est long.
en suivant de nombreux tuto j'ai commencer à implémenter des Thread.
 

Code :
  1. public class Simulateur {
  2. //j'ai créé une variable de classe hérité de Thread  
  3. Threadtest a;
  4. //dans le constructeur de mon simulateur
  5. public Simulateur {
  6. a=new Threadtest();
  7. a.start();
  8. }
  9. //une méthode
  10. public void rafraichir (){
  11. //à cette instant a est à l'état terminé  
  12. a.start();
  13. }
  14. }
  15. public class threadtest extends Thread{
  16.     @Override
  17.     public void run(){
  18. //mon code  
  19.         }
  20. }


 
Bien que mon threadtest soit terminé ma méthode rafraichir ne parvient pas à exécuter le thread.
 
Merci pour votre aide.

mood
Publicité
Posté le 09-11-2010 à 15:58:30  profilanswer
 

n°2035015
dreameddea​th
Posté le 09-11-2010 à 16:14:29  profilanswer
 

Normal : un thread ne peut se "starter" qu'une fois.
 
Il faut qu'il soit en attente "d'ordres" (ex rafraichir) dans le run...  
 
Pour ce qui est de la synchro pour passer des "ordres", il faut passer par de la "synchro" entres threads : queue synchronisés, etc...
 
Mais attention : il ne faut pas se lancer dans le multi-threading à la légère. En fait ce n'est pas un truc de novice (mais bon il faut en passer par là  :)  ). Il faut concevoir la chose, car la synchronisation entre thread ne s'improvise pas : les risque de deadlock (freeze de l'appli) sont très facile à générer et très difficile à débugger...  
 
As-tu une idée plus précise de ce que tu veux faire faire à chaque "thread" pour que l'on puisse t'orienter?
 
Sinon, j'avais un article assez intéressant sur le concept :
http://www.drdobbs.com/go-parallel [...] =215900465
 
Bon courage


Message édité par dreameddeath le 09-11-2010 à 17:00:38
n°2035024
isaac76
Posté le 09-11-2010 à 17:06:28  profilanswer
 

Je réalise un simulateur de connexion IPV6 en projet.
Afin de rendre l’expérience plus didactique j'aimerais afficher des informations en cascade tout en étant lisible. Par exemple :
 
jLabel.setText("connexion en cours" );
thread.sleep(3000);  //try catch  
jLabel.setText("connexion établi" );
 
malheureusement l'interface se fige pendant 3 secondes et m’affiche uniquement "connexion établi".
De plus le nombre d'états possible est presque illimité et il ne me semble pas réaliste de créer un Thread pour chaque étape de la connexion.

n°2035030
dreameddea​th
Posté le 09-11-2010 à 17:28:53  profilanswer
 

Je ne suis pas expert en GUI java (et l'aspect thread safe de l'ensemble), mais pour moi, ton thread peut faire "tout" le boulot de simulation (le code que tu as donné en exemple à mettre dans la méthode run)...
 
Par contre, il faut prévoir une machine d'état avec un "check" d'arrêt pour éviter d'attendre la fin de la simulation à chaque fois
 

Code :
  1. public enum simulation_states_connection = { SIM_BEFORE_CONNECT, SIM_CONNECTING ...,SIM_FINISHED};
  2. //dans le run
  3. states_connection curr_state;
  4. while (curr_state != SIM_FINISHED){
  5.      switch(curr_state){
  6.           case SIM_BEFORE_CONNECT:
  7.               jLabel.setText("Starting" );
  8.               //autres actions
  9.               sleep(100);
  10.               curr_state = CONNECTING;
  11.               break;
  12.           case CONNECTING:
  13.               //...
  14.           case
  15.      }
  16.      if(termination_request){
  17.          break;
  18.      }
  19. }


 
Pour ce qui est de la variable termination_request, il faut que ça soit une variable protégée par des accesseurs "synchronized"...
 
Il faudrait créer un thread à chaque début de simulation et bien le "terminer" avant d'en créer un autre.
 
En espérant que ça aide

n°2035036
isaac76
Posté le 09-11-2010 à 17:38:08  profilanswer
 

Merci pour ta réponse j'essaierai ca très bientôt.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  problème de Thread java

 

Sujets relatifs
Problème avec document.getElementByIdProblème PHP / Cron serveur / useradd
Problème PHP / Cron serveur / useraddproblème avec mon renderer
Consommer un webservice en JavaPHP et AJAX Probleme pour renvoyer une valeur
Problème Thread en java[JAVA]Probleme de Thread
[Applet JAVA] Problème de thread qui ne rend pas la main[JAVA] probleme de thread
Plus de sujets relatifs à : problème de Thread java


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR