Bonjour,
j'aimerais savoir comment detriure un thread:
quand je met myThread.destroy() cela me genere un NoSuchMethodError.
Sinon mon code est un peu crados, cad qu'au lieu de reutiliser un thread
je dois en creer un autre chaque fois que j'en ai besoin.
SI je met myThread=null quand j'ai fini de m'en servir est qu'il y a
moyen de forcer la JVM a desallouer la ref???
merci
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
Bernard Koninckx
Bonjour,
Je suis pas psécialiste des threads mais je me demande si il n'y a pas une méthode stop ou quelque chose dans le genre qui s'applique aux threads.
Des spécialistes pourront certainement mieux te répndre qu'un simple débutant comme moi.
Bernard
"Chat" a écrit dans le message de news: 40448129$0$28153$
Bonjour, j'aimerais savoir comment detriure un thread: quand je met myThread.destroy() cela me genere un NoSuchMethodError. Sinon mon code est un peu crados, cad qu'au lieu de reutiliser un thread je dois en creer un autre chaque fois que j'en ai besoin. SI je met myThread=null quand j'ai fini de m'en servir est qu'il y a moyen de forcer la JVM a desallouer la ref??? merci
Bonjour,
Je suis pas psécialiste des threads mais je me demande si il n'y a pas une
méthode stop ou quelque chose dans le genre qui s'applique aux threads.
Des spécialistes pourront certainement mieux te répndre qu'un simple
débutant comme moi.
Bernard
"Chat" <chat@nospam.com> a écrit dans le message de news:
40448129$0$28153$636a15ce@news.free.fr...
Bonjour,
j'aimerais savoir comment detriure un thread:
quand je met myThread.destroy() cela me genere un NoSuchMethodError.
Sinon mon code est un peu crados, cad qu'au lieu de reutiliser un thread
je dois en creer un autre chaque fois que j'en ai besoin.
SI je met myThread=null quand j'ai fini de m'en servir est qu'il y a
moyen de forcer la JVM a desallouer la ref???
merci
Je suis pas psécialiste des threads mais je me demande si il n'y a pas une méthode stop ou quelque chose dans le genre qui s'applique aux threads.
Des spécialistes pourront certainement mieux te répndre qu'un simple débutant comme moi.
Bernard
"Chat" a écrit dans le message de news: 40448129$0$28153$
Bonjour, j'aimerais savoir comment detriure un thread: quand je met myThread.destroy() cela me genere un NoSuchMethodError. Sinon mon code est un peu crados, cad qu'au lieu de reutiliser un thread je dois en creer un autre chaque fois que j'en ai besoin. SI je met myThread=null quand j'ai fini de m'en servir est qu'il y a moyen de forcer la JVM a desallouer la ref??? merci
Kupee
Chat wrote:
Bonjour, j'aimerais savoir comment detriure un thread: quand je met myThread.destroy() cela me genere un NoSuchMethodError. Sinon mon code est un peu crados, cad qu'au lieu de reutiliser un thread je dois en creer un autre chaque fois que j'en ai besoin. SI je met myThread=null quand j'ai fini de m'en servir est qu'il y a moyen de forcer la JVM a desallouer la ref???
Le mieux est qu'il finisse l'exécution de sa méthode run() donc si tu as une boucle dedans tu peux faire un truc genre
public void run() { while (running) { ... } } et quand tu veux stopper tu met running a false.
Sinon tu as le interrupt() mais il vaut mieux l'éviter autant que possible je crois
Chat wrote:
Bonjour,
j'aimerais savoir comment detriure un thread:
quand je met myThread.destroy() cela me genere un NoSuchMethodError.
Sinon mon code est un peu crados, cad qu'au lieu de reutiliser un thread
je dois en creer un autre chaque fois que j'en ai besoin.
SI je met myThread=null quand j'ai fini de m'en servir est qu'il y a
moyen de forcer la JVM a desallouer la ref???
Le mieux est qu'il finisse l'exécution de sa méthode run() donc si tu as
une boucle dedans tu peux faire un truc genre
public void run() {
while (running) {
...
}
}
et quand tu veux stopper tu met running a false.
Sinon tu as le interrupt() mais il vaut mieux l'éviter autant que
possible je crois
Bonjour, j'aimerais savoir comment detriure un thread: quand je met myThread.destroy() cela me genere un NoSuchMethodError. Sinon mon code est un peu crados, cad qu'au lieu de reutiliser un thread je dois en creer un autre chaque fois que j'en ai besoin. SI je met myThread=null quand j'ai fini de m'en servir est qu'il y a moyen de forcer la JVM a desallouer la ref???
Le mieux est qu'il finisse l'exécution de sa méthode run() donc si tu as une boucle dedans tu peux faire un truc genre
public void run() { while (running) { ... } } et quand tu veux stopper tu met running a false.
Sinon tu as le interrupt() mais il vaut mieux l'éviter autant que possible je crois
Chat
oui c ce que je fais pour le stopper, mais ensuite je veux effacer la ref de ce thread en memoire, car malheuresement je dois en creer plusieurs alors veux liberer la memoire des que j'ai + besoin de qq'chose, sinon est ce que vous savez comment invoker le garbage collector???
Chat wrote:
Bonjour, j'aimerais savoir comment detriure un thread: quand je met myThread.destroy() cela me genere un NoSuchMethodError. Sinon mon code est un peu crados, cad qu'au lieu de reutiliser un thread je dois en creer un autre chaque fois que j'en ai besoin. SI je met myThread=null quand j'ai fini de m'en servir est qu'il y a moyen de forcer la JVM a desallouer la ref???
Le mieux est qu'il finisse l'exécution de sa méthode run() donc si tu as une boucle dedans tu peux faire un truc genre
public void run() { while (running) { ... } } et quand tu veux stopper tu met running a false.
Sinon tu as le interrupt() mais il vaut mieux l'éviter autant que possible je crois
oui c ce que je fais pour le stopper, mais ensuite je veux effacer la
ref de ce thread en memoire, car malheuresement je dois en creer
plusieurs alors veux liberer la memoire des que j'ai + besoin de
qq'chose, sinon est ce que vous savez comment invoker le garbage
collector???
Chat wrote:
Bonjour,
j'aimerais savoir comment detriure un thread:
quand je met myThread.destroy() cela me genere un NoSuchMethodError.
Sinon mon code est un peu crados, cad qu'au lieu de reutiliser un
thread je dois en creer un autre chaque fois que j'en ai besoin.
SI je met myThread=null quand j'ai fini de m'en servir est qu'il y a
moyen de forcer la JVM a desallouer la ref???
Le mieux est qu'il finisse l'exécution de sa méthode run() donc si tu as
une boucle dedans tu peux faire un truc genre
public void run() {
while (running) {
...
}
}
et quand tu veux stopper tu met running a false.
Sinon tu as le interrupt() mais il vaut mieux l'éviter autant que
possible je crois
oui c ce que je fais pour le stopper, mais ensuite je veux effacer la ref de ce thread en memoire, car malheuresement je dois en creer plusieurs alors veux liberer la memoire des que j'ai + besoin de qq'chose, sinon est ce que vous savez comment invoker le garbage collector???
Chat wrote:
Bonjour, j'aimerais savoir comment detriure un thread: quand je met myThread.destroy() cela me genere un NoSuchMethodError. Sinon mon code est un peu crados, cad qu'au lieu de reutiliser un thread je dois en creer un autre chaque fois que j'en ai besoin. SI je met myThread=null quand j'ai fini de m'en servir est qu'il y a moyen de forcer la JVM a desallouer la ref???
Le mieux est qu'il finisse l'exécution de sa méthode run() donc si tu as une boucle dedans tu peux faire un truc genre
public void run() { while (running) { ... } } et quand tu veux stopper tu met running a false.
Sinon tu as le interrupt() mais il vaut mieux l'éviter autant que possible je crois
Arnaud Roger
"Chat" a écrit dans le message de news:4044863f$0$28123$
oui c ce que je fais pour le stopper, mais ensuite je veux effacer la ref de ce thread en memoire, car malheuresement je dois en creer plusieurs alors veux liberer la memoire des que j'ai + besoin de qq'chose, sinon est ce que vous savez comment invoker le garbage collector??? c'est une mauvaise idee de vouloir forcer le garbage collector a faire son
il faut peut etre plutot regarder du coté du pool de thread, la creation d'un Thread est en effet quelque chose de couteux.
Arnaud R.
"Chat" <chat@nospam.com> a écrit dans le message de
news:4044863f$0$28123$636a15ce@news.free.fr...
oui c ce que je fais pour le stopper, mais ensuite je veux effacer la
ref de ce thread en memoire, car malheuresement je dois en creer
plusieurs alors veux liberer la memoire des que j'ai + besoin de
qq'chose, sinon est ce que vous savez comment invoker le garbage
collector???
c'est une mauvaise idee de vouloir forcer le garbage collector a faire son
"Chat" a écrit dans le message de news:4044863f$0$28123$
oui c ce que je fais pour le stopper, mais ensuite je veux effacer la ref de ce thread en memoire, car malheuresement je dois en creer plusieurs alors veux liberer la memoire des que j'ai + besoin de qq'chose, sinon est ce que vous savez comment invoker le garbage collector??? c'est une mauvaise idee de vouloir forcer le garbage collector a faire son
il faut peut etre plutot regarder du coté du pool de thread, la creation d'un Thread est en effet quelque chose de couteux.
Arnaud R.
Kupee
Chat wrote:
oui c ce que je fais pour le stopper, mais ensuite je veux effacer la ref de ce thread en memoire, car malheuresement je dois en creer plusieurs alors veux liberer la memoire des que j'ai + besoin de qq'chose, sinon est ce que vous savez comment invoker le garbage collector???
Ah, ba une fois que tu n'as plus de référence vers ce Thread et s'il ne tourne plus, le Garbage Collector devrait le libérer. Si tu veux l'invoquer, System.gc() Mais les specs de la JVM ne garantissent pas le fonctionnement de cette méthode (en pratique ca marche, mais peut etre qu'on peut trouver des jvms qui n'y répondent pas) De plus invoquer le garbage collector est relativement lent, et donc il faut vraiment en avoir grand besoin
Chat wrote:
oui c ce que je fais pour le stopper, mais ensuite je veux effacer la
ref de ce thread en memoire, car malheuresement je dois en creer
plusieurs alors veux liberer la memoire des que j'ai + besoin de
qq'chose, sinon est ce que vous savez comment invoker le garbage
collector???
Ah, ba une fois que tu n'as plus de référence vers ce Thread et s'il ne
tourne plus, le Garbage Collector devrait le libérer.
Si tu veux l'invoquer, System.gc()
Mais les specs de la JVM ne garantissent pas le fonctionnement de cette
méthode (en pratique ca marche, mais peut etre qu'on peut trouver des
jvms qui n'y répondent pas)
De plus invoquer le garbage collector est relativement lent, et donc il
faut vraiment en avoir grand besoin
oui c ce que je fais pour le stopper, mais ensuite je veux effacer la ref de ce thread en memoire, car malheuresement je dois en creer plusieurs alors veux liberer la memoire des que j'ai + besoin de qq'chose, sinon est ce que vous savez comment invoker le garbage collector???
Ah, ba une fois que tu n'as plus de référence vers ce Thread et s'il ne tourne plus, le Garbage Collector devrait le libérer. Si tu veux l'invoquer, System.gc() Mais les specs de la JVM ne garantissent pas le fonctionnement de cette méthode (en pratique ca marche, mais peut etre qu'on peut trouver des jvms qui n'y répondent pas) De plus invoquer le garbage collector est relativement lent, et donc il faut vraiment en avoir grand besoin
Bruno Causse
dans l'article 404490a1$0$28131$, Kupee à a écrit le 02/03/2004 14:48 :
Si tu veux l'invoquer, System.gc() Mais les specs de la JVM ne garantissent pas le fonctionnement de cette méthode (en pratique ca marche, mais peut etre qu'on peut trouver des jvms qui n'y répondent pas) De plus invoquer le garbage collector est relativement lent, et donc il faut vraiment en avoir grand besoin
sans interet, le seul cas que je j'entrevois est dans une attente d'action. tant qu'a attendre je ramasse les miettes :)
dans l'article 404490a1$0$28131$636a15ce@news.free.fr, Kupee à
rien@rien.rien a écrit le 02/03/2004 14:48 :
Si tu veux l'invoquer, System.gc()
Mais les specs de la JVM ne garantissent pas le fonctionnement de cette
méthode (en pratique ca marche, mais peut etre qu'on peut trouver des
jvms qui n'y répondent pas)
De plus invoquer le garbage collector est relativement lent, et donc il
faut vraiment en avoir grand besoin
sans interet, le seul cas que je j'entrevois est dans une attente d'action.
tant qu'a attendre je ramasse les miettes :)
dans l'article 404490a1$0$28131$, Kupee à a écrit le 02/03/2004 14:48 :
Si tu veux l'invoquer, System.gc() Mais les specs de la JVM ne garantissent pas le fonctionnement de cette méthode (en pratique ca marche, mais peut etre qu'on peut trouver des jvms qui n'y répondent pas) De plus invoquer le garbage collector est relativement lent, et donc il faut vraiment en avoir grand besoin
sans interet, le seul cas que je j'entrevois est dans une attente d'action. tant qu'a attendre je ramasse les miettes :)
SK
Kupee wrote:
Le mieux est qu'il finisse l'exécution de sa méthode run() donc si tu as une boucle dedans tu peux faire un truc genre
public void run() { while (running) { ... } } et quand tu veux stopper tu met running a false.
Sinon tu as le interrupt() mais il vaut mieux l'éviter autant que possible je crois
En effet, mais contrairement à ce que tu dis, la méthode interrupt() sert à ça !
while(!isInterrupted()){ ... }
L'appel à la méthode interrupt() n'arrête pas du tout la thread, elle change juste un drapeau que récupère la méthode isInterrupted(), ce qui peut permettre de mettre fin à la thread en lui faisant quitter la méthode run. En ajoutant un booleen running, tu réinventes un peu la roue.
Par contre la méthode destroy() est deprecated parce que forcer un thread à quitter brutalement peut entraîner des incohérences dans les données qu'elle était en train de manipuler.
Désolé d'être un peu sorti du contexte, mais je me devais d'apporter quelques précisions.
SK.
Kupee wrote:
Le mieux est qu'il finisse l'exécution de sa méthode run() donc si tu as
une boucle dedans tu peux faire un truc genre
public void run() {
while (running) {
...
}
}
et quand tu veux stopper tu met running a false.
Sinon tu as le interrupt() mais il vaut mieux l'éviter autant que
possible je crois
En effet, mais contrairement à ce que tu dis, la méthode interrupt()
sert à ça !
while(!isInterrupted()){
...
}
L'appel à la méthode interrupt() n'arrête pas du tout la thread, elle
change juste un drapeau que récupère la méthode isInterrupted(), ce qui
peut permettre de mettre fin à la thread en lui faisant quitter la
méthode run.
En ajoutant un booleen running, tu réinventes un peu la roue.
Par contre la méthode destroy() est deprecated parce que forcer un
thread à quitter brutalement peut entraîner des incohérences dans les
données qu'elle était en train de manipuler.
Désolé d'être un peu sorti du contexte, mais je me devais d'apporter
quelques précisions.
Le mieux est qu'il finisse l'exécution de sa méthode run() donc si tu as une boucle dedans tu peux faire un truc genre
public void run() { while (running) { ... } } et quand tu veux stopper tu met running a false.
Sinon tu as le interrupt() mais il vaut mieux l'éviter autant que possible je crois
En effet, mais contrairement à ce que tu dis, la méthode interrupt() sert à ça !
while(!isInterrupted()){ ... }
L'appel à la méthode interrupt() n'arrête pas du tout la thread, elle change juste un drapeau que récupère la méthode isInterrupted(), ce qui peut permettre de mettre fin à la thread en lui faisant quitter la méthode run. En ajoutant un booleen running, tu réinventes un peu la roue.
Par contre la méthode destroy() est deprecated parce que forcer un thread à quitter brutalement peut entraîner des incohérences dans les données qu'elle était en train de manipuler.
Désolé d'être un peu sorti du contexte, mais je me devais d'apporter quelques précisions.
SK.
Kupee
SK wrote:
En effet, mais contrairement à ce que tu dis, la méthode interrupt() sert à ça !
while(!isInterrupted()){ ... }
L'appel à la méthode interrupt() n'arrête pas du tout la thread, elle change juste un drapeau que récupère la méthode isInterrupted(), ce qui peut permettre de mettre fin à la thread en lui faisant quitter la méthode run. En ajoutant un booleen running, tu réinventes un peu la roue.
Par contre la méthode destroy() est deprecated parce que forcer un thread à quitter brutalement peut entraîner des incohérences dans les données qu'elle était en train de manipuler.
Désolé d'être un peu sorti du contexte, mais je me devais d'apporter quelques précisions.
Tout a fait je m'étais trompé. Par contre dans ce cas je saisis pas bien pourquoi elle est native cette méthode. Est ce que ca réveille un thread qui était en sleep ou en wait ?
SK wrote:
En effet, mais contrairement à ce que tu dis, la méthode interrupt()
sert à ça !
while(!isInterrupted()){
...
}
L'appel à la méthode interrupt() n'arrête pas du tout la thread, elle
change juste un drapeau que récupère la méthode isInterrupted(), ce qui
peut permettre de mettre fin à la thread en lui faisant quitter la
méthode run.
En ajoutant un booleen running, tu réinventes un peu la roue.
Par contre la méthode destroy() est deprecated parce que forcer un
thread à quitter brutalement peut entraîner des incohérences dans les
données qu'elle était en train de manipuler.
Désolé d'être un peu sorti du contexte, mais je me devais d'apporter
quelques précisions.
Tout a fait je m'étais trompé. Par contre dans ce cas je saisis pas bien
pourquoi elle est native cette méthode.
Est ce que ca réveille un thread qui était en sleep ou en wait ?
En effet, mais contrairement à ce que tu dis, la méthode interrupt() sert à ça !
while(!isInterrupted()){ ... }
L'appel à la méthode interrupt() n'arrête pas du tout la thread, elle change juste un drapeau que récupère la méthode isInterrupted(), ce qui peut permettre de mettre fin à la thread en lui faisant quitter la méthode run. En ajoutant un booleen running, tu réinventes un peu la roue.
Par contre la méthode destroy() est deprecated parce que forcer un thread à quitter brutalement peut entraîner des incohérences dans les données qu'elle était en train de manipuler.
Désolé d'être un peu sorti du contexte, mais je me devais d'apporter quelques précisions.
Tout a fait je m'étais trompé. Par contre dans ce cas je saisis pas bien pourquoi elle est native cette méthode. Est ce que ca réveille un thread qui était en sleep ou en wait ?
SK
Kupee wrote:
Tout a fait je m'étais trompé. Par contre dans ce cas je saisis pas bien pourquoi elle est native cette méthode. Est ce que ca réveille un thread qui était en sleep ou en wait ?
Comme je l'avais dit, la méthode interrupt ne fait que modifier un champ que peut consulter la méthode isInterrupted(). Donc elle ne réveille en aucune manière une thread qui est en sleep ou en wait. Il faut donc continuer à passer par les méthodes notify() ou notifyAll() comme d'habitude pour les réveiller.
SK.
Kupee wrote:
Tout a fait je m'étais trompé. Par contre dans ce cas je saisis pas bien
pourquoi elle est native cette méthode.
Est ce que ca réveille un thread qui était en sleep ou en wait ?
Comme je l'avais dit, la méthode interrupt ne fait que modifier un champ
que peut consulter la méthode isInterrupted(). Donc elle ne réveille en
aucune manière une thread qui est en sleep ou en wait.
Il faut donc continuer à passer par les méthodes notify() ou notifyAll()
comme d'habitude pour les réveiller.
Tout a fait je m'étais trompé. Par contre dans ce cas je saisis pas bien pourquoi elle est native cette méthode. Est ce que ca réveille un thread qui était en sleep ou en wait ?
Comme je l'avais dit, la méthode interrupt ne fait que modifier un champ que peut consulter la méthode isInterrupted(). Donc elle ne réveille en aucune manière une thread qui est en sleep ou en wait. Il faut donc continuer à passer par les méthodes notify() ou notifyAll() comme d'habitude pour les réveiller.