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 :
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...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 :
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
--------------
"Samuel" <dbs@itflash.com> 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 :
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
- 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 :
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
--------------
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 :
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
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" <dbs@itflash.com> a écrit dans le message de
news:4084f611$0$26449$626a14ce@news.free.fr...
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 :
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...
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 :
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...