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

  FORUM HardWare.fr
  Programmation
  Java

  Problème Thread en java

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème Thread en java

n°872403
tomsawyer1​21
Posté le 13-10-2004 à 14:40:35  profilanswer
 

Salut tout le monde,
 
j'ai un petit problème avec les threads en java voici le code
 

Code :
  1. package labo3thread;
  2. class MyThread implements Runnable{
  3.     public int nba;
  4.     public int nbb;
  5.    
  6.     public MyThread(int n1,int n2){
  7.         nba=n1;
  8.         nbb=n2;
  9.     };
  10.    
  11.     public MyThread(){
  12.        
  13.     };
  14.    
  15.     public void run() {
  16.      System.out.println("Je suis dans la thread resultat : " + nba + nbb);
  17.      nba=50;
  18.      nbb=50;
  19.    
  20.     }
  21. }
  22. public class labo3thread {
  23.    
  24.     public labo3thread() {
  25.     }
  26.    
  27.    
  28.     public static void main(String[] args) {
  29.         int i,j;
  30.         int a,b;
  31.         int [] tabint = new int[2];
  32.         tabint[0]=7;
  33.         tabint[1]=7;
  34.      
  35.         MyThread[] mt = new MyThread[8];
  36.         Thread[] TabThread = new Thread[8];
  37.         a=b=0;
  38.         mt[0] = new MyThread(a,b);
  39.         TabThread[0] = new Thread(mt[0]);
  40.        
  41.         mt[1] = new MyThread(tabint[0],tabint[1]);
  42.         TabThread[1] = new Thread(mt[1]);
  43.        
  44.       /*  int[][] Mat1 = new int [4][4];
  45.         int[][] Mat2 = new int [4][4];
  46.          
  47.         for(i=0;i<4;i++){
  48.             for(j=0;j<4;j++){
  49.                 Mat1[i][j]=i+1;
  50.                 Mat2[i][j]=j+1;
  51.             }
  52.         }*/
  53.         TabThread[0].start();
  54.         TabThread[1].start();
  55.         try{
  56.         for(i=0;i<2;i++){
  57.             TabThread[i].join();       
  58.         }
  59.         }
  60.         catch(Exception e){
  61.         }
  62.         System.out.println("resu" + a + b);
  63.         System.out.println("resu" + tabint[0] + tabint[1]);
  64.        
  65.         // TODO code application logic here
  66.     }
  67. }


 
et les résultat

Code :
  1. Je suis dans la thread resultat : 00
  2. Je suis dans la thread resultat : 77
  3. resu00
  4. resu77


 
Je n'arrive pas a passer les handler de mes deux entier a et b déclarés dans le main pour qu'ils puissent modifié depuis la thread ! J'ai essayer avec un tableau marche pas non plus !
Ou ce trouve les variables partagée entre le main et les threads a la création d'une thread le main devient pas une thread comme en C ?
 
Merci


Message édité par tomsawyer121 le 13-10-2004 à 14:44:20
mood
Publicité
Posté le 13-10-2004 à 14:40:35  profilanswer
 

n°872474
phnatomass
Je m'empare de ton esprit !!
Posté le 13-10-2004 à 15:51:00  profilanswer
 

T'attendais quoi de ton programme ?
T'as créés 2 instances distincts de MyThread donc elle ne partage rien comme attribut.

n°872484
tomsawyer1​21
Posté le 13-10-2004 à 16:07:29  profilanswer
 

C'esr bien ce qui me semblait je peut mettre le main du prog dans la class qui implements runnable ?
Comme ca je peut faire plusieurs thread qui on le main en commun !
 
T'en pense quoi ?


Message édité par tomsawyer121 le 13-10-2004 à 16:32:06
n°872506
bill.fr
Posté le 13-10-2004 à 16:32:24  profilanswer
 

En gros si je résume tu veux simplement partager les attributs pour tes threads ?
 
Le plus propre c'est de mettre ton nba et nbb dans la classe du main, en private, avec des getter et setter. Ensuite tu construit les threads non pas avec les valeurs de ces nombres, mais en passant ta classe principale comme attribut

Code :
  1. class MyThread implements Runnable {
  2.   private Labo3Thread labo;
  3.   public MyThread(Labo3Thread lab) { this.labo = lab; }
  4.   public void run {
  5.     System.out.println("Je suis dans la thread resultat : " + labo.getNba() + labo.getNbb()); 
  6.     labo.setNba(50);
  7.     labo.setNbb(50);
  8.   }
  9. }
  10. public class Labo3Thread {
  11.   private int nba;
  12.   private int nbb;
  13.   public int getNba() { return nba; }
  14.   public int getNbb() { return nbb; }
  15.   public int setNba(int nba) { this.nba = nba; }
  16.   public int setNbb(int nbb) { this.nbb = nbb; }
  17.   public static void main(String[] args) {
  18.     /* identique sauf pour les créations des threads : new MyThread(this) /*
  19.   }
  20. }


 
Dis moi si ca te convient
 
Bill


Message édité par bill.fr le 13-10-2004 à 16:33:57

---------------
On ne vit qu'une fois, mais pour qui sait vivre, une seule fois suffit (Merril Stubbing)
n°872547
tomsawyer1​21
Posté le 13-10-2004 à 17:32:06  profilanswer
 

Salut bill,
 
je comprend bien ton prog, oui c'est une facon de faire mais je ne saisi pas bien la notion de l'espace mémoire partagé alors dans ce cas si y'en a pas étant donné que tu passe le main à la thread ! On ne peut pas déclarer la méthode run ainsi que le main dans la même class un peu comme ca :
 

Code :
  1. public class test implements Runnable {
  2.    
  3.     /** Creates a new instance of test */
  4.     public test() {
  5.     }
  6.    
  7.     static Thread MyThread;
  8.     static int compteur;
  9.    
  10.     void addcompteur(){
  11.         compteur = compteur + 1000;
  12.     }
  13.    
  14.     public static void main(String[] args) {
  15.         MyThread = new Thread();
  16.         MyThread.start();
  17.         try{
  18.         MyThread.join();
  19.         }
  20.         catch(Exception e){
  21.             System.out.println("exception sur join" );
  22.         }
  23.         System.out.println("dans main" + compteur);
  24.     }
  25.     public void run() {
  26.         int nb1;
  27.         nb1=8;
  28.    //     addcompteur();
  29.         System.out.println("in run" + nb1);
  30.     }
  31. }


 
De cette facon les variable de la class test sont commune au thread et a la class main. C'est possible que ca tourne dans ce style la ?  
 
Merci

n°872575
phnatomass
Je m'empare de ton esprit !!
Posté le 13-10-2004 à 18:24:25  profilanswer
 

Je crois que ton bout de code est 1 peu bidon.
Tu ne dois pas penser en terme d'espace mémoire partagée mais en terme d'objet partagé.

n°872707
Lam's
Profil: bas.
Posté le 13-10-2004 à 20:51:22  profilanswer
 

Bon, je suis qu'un sale ex-codeur C++, mais ça me choque tout ça. Il faudrait pas:
1. creer une classe Toto, avec 2 champs a et b.
2. créer une instance de toto dans le main()
3. démarrer le Run, en passant toto aux threads.
4. Et les threads n'ont plus qu'à faire:
synchronized totoInstance {
   totoInstance.a = 23;
}
 
Ou bien je me gourre comme une grosse merde ?

n°872718
nraynaud
lol
Posté le 13-10-2004 à 21:06:50  profilanswer
 

J'y capte rien à ton bordel. Je vois pas les besoins, les choix, et le "vocabulaire" est trop technique.
 
 
je vois qu'une seule chose : tu as implémenté Runnable au-lieu de souclasser Thread, et c'est bien.
 
 
 
 
 
 
(nan, moi j'ai sous-classé thread pour lui rajouter un champ, c'est pas pareil)


---------------
trainoo.com, c'est fini

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

  Problème Thread en java

 

Sujets relatifs
probleme avec rhideRésolu [CSS] Problème de list - display inline
un petit problème d'algo[css] Petit problème de taille d'un div
probleme de classe[ORACLE 9.2] Problème dans le Manager des tâches Win
[Java] Problème de conception d'une classe GraphMap[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 Thread en java


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