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

  FORUM HardWare.fr
  Programmation
  Java

  Tuer un thread

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tuer un thread

n°750039
tanguy
Posté le 03-06-2004 à 03:47:42  profilanswer
 

J'utilise un thread dans mon programme Java.
Je voudrais tuer ce thread pour le relancer ensuite.
 
Je connais 2 possibilites (cf Thinking in Java http://www.bruceeckel.com ) pour le faire:
- utiliser un boolean stop et dans la methode run() du thread on stop le thread si le boolean est a vrai.
- dans le cas ou le thread est bloque dans le run() par un wait(), on utilise Thread.interrupt() ensuite on met le thread a null et on appelle le ramasse-miette
 
Malheureusement dans la methode run() de mon thread, j'utilise ServerSocket.accept() qui se bloque en attendant un client et donc les 2 solutions ci-dessus ne fonctionnent pas.
 
Je voudrais donc savoir s'il existe une solution pour tuer puis relancer mon thread alors que celui-ci est bloque par ServerSocket.accept()
 
Je me pose aussi la question d'utiliser java.nio
Si j'ai bien compris ca permet de faire comme le select() en C et donc on n'utilise pas de thread ?

mood
Publicité
Posté le 03-06-2004 à 03:47:42  profilanswer
 

n°750058
nraynaud
lol
Posté le 03-06-2004 à 08:16:17  profilanswer
 

bon, je te donne l'adresse de l'élite mondiale du java, mais tu la répètes pas !
 
http://www.javaspecialists.co.za/archive/Issue056.html


---------------
trainoo.com, c'est fini
n°751526
yo c spi
Yo !
Posté le 03-06-2004 à 21:23:37  profilanswer
 

J'ai un problème similaire et j'avais essayé la méthode de nraynaud mais le Thread attend une connexion sur le socket, et ca bloque donc jusqua ce que quelqu'un se connecte au socket
code :

Code :
  1. /**
  2.      * Starts a new Thread for the server
  3.      */
  4.     public void run() {
  5.         try{
  6.             ss = new ServerSocket(port);
  7.             while(ss!=null || !ss.isClosed()) {
  8.                 Socket s = ss.accept();
  9.                 new Request(s, ht);
  10.             }
  11.         }
  12.         catch(SocketException e) {
  13.             System.err.println("Serveur stoppé : Socket closed" );
  14.         }
  15.         catch(IOException e) {
  16.             System.err.println(e);
  17.         }
  18.     }
  19.    
  20.     /**
  21.      * Starts the server, it calls the method run() of this Runnable object
  22.      */
  23.     public synchronized void start() {
  24.         if(!t.isAlive()) {
  25.             //System.err.println("starting..." );
  26.             t.start();
  27.         }
  28.     }
  29.    
  30.     /**
  31.      * Stops the server
  32.      */
  33.     public synchronized void stop() {
  34.         try {
  35.             if(isRunning()) {
  36.                 ss.close();
  37.             }
  38.         }
  39.         catch(IOException e) {
  40.             System.err.println(e);
  41.         }
  42.         finally {
  43.             ss = null;
  44.         }
  45.     }
  46.    
  47.    
  48.     /**
  49.      * Returns if the server is currently running
  50.      * @return true if the server is running
  51.      */
  52.     public synchronized boolean isRunning() {
  53.         return (ss != null && !ss.isClosed());
  54.     }


Cette méthode marche à peu pres, mais tends à bugguer par moment.
Est-ce que quelq'un a une autre solution ?
 
Merci.

n°751543
schnapsman​n
Zaford Beeblefect
Posté le 03-06-2004 à 21:41:12  profilanswer
 


t'as vraiment lu l'article cité par trainaud?
1/ il y est dit que Thread.interupt() est buggué concernant les appels IO bloquants
2/ pour countourner le pb, il faut fermer la socket avant de tenter de fermer la thread


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°751652
raytaller
Posté le 03-06-2004 à 23:17:03  profilanswer
 

[hs]
[troll]

Citation :

je te donne l'adresse de l'élite mondiale du java


 
Bah merde, il est même pas valide W3C, et il merdoie avec un navigateur qui respecte les standards du web comme Firefox...  :sweat:  
 
[/troll]
[/hs]
 

n°752382
nraynaud
lol
Posté le 04-06-2004 à 12:17:53  profilanswer
 

raytaller a écrit :

[hs]
[troll]

Citation :

je te donne l'adresse de l'élite mondiale du java


 
Bah merde, il est même pas valide W3C, et il merdoie avec un navigateur qui respecte les standards du web comme Firefox...  :sweat:  
 
[/troll]
[/hs]

chez moi ça marche sans pb.


---------------
trainoo.com, c'est fini
n°752416
darklord
You're welcome
Posté le 04-06-2004 à 12:52:15  profilanswer
 

nraynaud a écrit :

chez moi ça marche sans pb.


 
+1

n°752879
raytaller
Posté le 04-06-2004 à 17:08:18  profilanswer
 

http://tom.rethaller.free.fr/vrac/PasValideW3CCeSite.PNG

n°752902
WhatDe
Posté le 04-06-2004 à 17:25:24  profilanswer
 

nraynaud a écrit :

bon, je te donne l'adresse de l'élite mondiale du java, mais tu la répètes pas !
 
http://www.javaspecialists.co.za/archive/Issue056.html


http://www.javaspecialists.co.za/d [...] itius.html
Des cours comme ca j'en veux bien tous les jours


---------------
[:whatde]
n°752903
WhatDe
Posté le 04-06-2004 à 17:25:47  profilanswer
 
mood
Publicité
Posté le 04-06-2004 à 17:25:47  profilanswer
 

n°752907
yo c spi
Yo !
Posté le 04-06-2004 à 17:28:17  profilanswer
 

schnapsmann a écrit :

t'as vraiment lu l'article cité par trainaud?
1/ il y est dit que Thread.interupt() est buggué concernant les appels IO bloquants
2/ pour countourner le pb, il faut fermer la socket avant de tenter de fermer la thread


C'est bon j'ai trouvé une solution qui marche très bien sans utiliser interrupt();
Mais merci (en effet, je n'avais pas bien lu)


Message édité par yo c spi le 04-06-2004 à 17:31:07
n°755577
tanguy
Posté le 07-06-2004 à 22:58:07  profilanswer
 

Je remercie nraynaud pour son lien, maintenant ca fonctionne.
 
yo c spi > c'est quoi ta solution, ca interesse du monde !

n°755599
nraynaud
lol
Posté le 07-06-2004 à 23:12:57  profilanswer
 

de rien.


---------------
trainoo.com, c'est fini
n°755707
benou
Posté le 08-06-2004 à 01:29:46  profilanswer
 

tanguy a écrit :

yo c spi > c'est quoi ta solution, ca interesse du monde !


surement une boucle avec un boolean qui passe à false au moment de tuer le thread ...

n°755708
nraynaud
lol
Posté le 08-06-2004 à 01:32:28  profilanswer
 

benou a écrit :

surement une boucle avec un boolean qui passe à false au moment de tuer le thread ...

http://glenn.sanson.free.fr/killtheshadoks/s8.gif


---------------
trainoo.com, c'est fini
n°755715
tanguy
Posté le 08-06-2004 à 02:21:13  profilanswer
 

benou a écrit :

surement une boucle avec un boolean qui passe à false au moment de tuer le thread ...


Le probleme c'est que justement dans le cas present on ne peut pas, sinon j'aurais jamais pose la question ;)


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

  Tuer un thread

 

Sujets relatifs
[Résolu][Windows]Kill thread PythonLancer un thread et passage de paramètre
thread en pythonpb d'utilisation des thread sous linux - Résolu
[interface graphique][thread][Compression DivX En Système Répartis] Multiple thread listener ?
Thread, prob libération mémoireGestion des thread sous Linux
thread en ASPVous etes plus Thread ou Timer?
Plus de sujets relatifs à : Tuer un thread


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