OVH Cloud OVH Cloud

MultiThreading

2 réponses
Avatar
Samuel
Bonjour à tous,


J'ai créé uen application multithread qui fonctionne mais je me pose encore
quelques questions pour optimiser ce code :

- Mon programme principal va chercher des paramètres dans un fichier texte
- Mon programme principal crée un Thread, pour que mon thread récupère les
paramètres, je lui envoi le "this" de mon prog principal, dans le
constructeur de mon thread :

PROGPRINCIPAL m_js ;
public QueryThread(PROGPRINCIPAL js)
{
m_js = j
}

et après je récupère les parametres via des fonction membres de mon prog
principal :

m_js.GetParam() ;

cela est-il correct ou y a t'il une recopie de l'object ? je dis ça car
quand dans mon deuxième thread je crée un autre thread et que je passe le
"this" de mon premier thread, je peux toujours accèder aux methodes du
premier thread alors que celui-ci est terminé ! Y a t'il une feinte pour
utiliser ces variables autrement car cela ne me parait pas hyper propre...

Merci à vous,

Samuel

2 réponses

Avatar
JScoobyCed
"Samuel" a ecrit
Bonjour à tous,


Bonjour

- Mon programme principal va chercher des paramètres dans un fichier texte
- Mon programme principal crée un Thread, pour que mon thread récupère les
paramètres, je lui envoi le "this" de mon prog principal, dans le
constructeur de mon thread :

PROGPRINCIPAL m_js ;
public QueryThread(PROGPRINCIPAL js)
{
m_js = j
}

et après je récupère les parametres via des fonction membres de mon prog
principal :

m_js.GetParam() ;

cela est-il correct ou y a t'il une recopie de l'object ?


Il n'y a toujours qu'un seul objet ProgPrincipal tant que tu n'invoque pas
le contructeur. Tout ce qui est copie est la reference sur cet objet.

je dis ça car
quand dans mon deuxième thread je crée un autre thread et que je passe le
"this" de mon premier thread, je peux toujours accèder aux methodes du
premier thread alors que celui-ci est terminé !
Tout a fait normal. L'objet ProgPrincipal est toujours actif, donc ton

premier Thread qui possede une reference dessus est par definition toujours
actif, existe toujours.
Y a t'il une feinte pour
utiliser ces variables autrement car cela ne me parait pas hyper propre...

Tu as la possibilite d'utiliser le singleton dans ton ProgPrincipal et de

l'utiliser dans tes Threads.
<sniplet>
public class ProgPrincipal {
private static ProgPrincipal pp = null;

public static ProgPrincipal getInstance() {
if(pp==null)
pp = new ProgPrincipal()
return pp;
}
...
}

public class MonThread extends Thread { // implements Runnable serais
// mieux mais ca depend de ton code

public void run() {
ProgPrincipal.getInstance().getParams();
...
}
...
}
</sniplet>
Merci à vous,


De rien. Maintenant, tu dois avoir du "synchronize" la ou il faut car sinon
ton acces a ProgPrincipal va etre plutot chaotique


Samuel

JScoobyCed

--------------

Avatar
Xavier Tarrago
En fait, le terme thread recouvre deux concepts, deux enittés avec deux
durées de vie différentes :

1) Le thread = flot d'exécution. Ce n'est pas un objet java. C'est un flot
d'exécution lié au système (OS ou machine virtuelle). Il est associé à un
objet Thread qui permet de le controler (start, join, ...). Il commence à
s'exécuter à l'appel de la méthode start de l'objet Thread associé et se
termine lors du retour de cette méthode.

2) L'objet java instance d'une classe dérivant de la classe Thread. Cet
objet permet de lancer et de controler un thread (flot d'exécution). Il
existe après l'appel au constructeur et jusqu'à la finalisation.

L'objet Thread existe donc avant que le thread ne commence à s'exécuter et
après qu'il se soit terminé. Il est tout à fait normal que des objets
utilisés ou produits lors de l'exécution soient stockés dans l'objet (dérivé
de) Thread avant l'exécution et récupérés après la fin. Attention cependant
à bien détecter la fin de l'exécution (join ou wait par exemple) et à
synchroniser les accès si ils peuvent être concurrents.

"Samuel" a écrit dans le message de
news:4084f611$0$26449$
Bonjour à tous,


J'ai créé uen application multithread qui fonctionne mais je me pose
encore

quelques questions pour optimiser ce code :

- Mon programme principal va chercher des paramètres dans un fichier texte
- Mon programme principal crée un Thread, pour que mon thread récupère les
paramètres, je lui envoi le "this" de mon prog principal, dans le
constructeur de mon thread :

PROGPRINCIPAL m_js ;
public QueryThread(PROGPRINCIPAL js)
{
m_js = j
}

et après je récupère les parametres via des fonction membres de mon prog
principal :

m_js.GetParam() ;

cela est-il correct ou y a t'il une recopie de l'object ? je dis ça car
quand dans mon deuxième thread je crée un autre thread et que je passe le
"this" de mon premier thread, je peux toujours accèder aux methodes du
premier thread alors que celui-ci est terminé ! Y a t'il une feinte pour
utiliser ces variables autrement car cela ne me parait pas hyper propre...

Merci à vous,

Samuel