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

  FORUM HardWare.fr
  Programmation
  Java

  multithread

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Page Précédente
Auteur Sujet :

multithread

n°613580
krosso
j'suis à la bourre
Posté le 16-01-2004 à 15:37:32  profilanswer
 

Un serveur doit lancer des traitements (trt) qui sont des threads.
 
Les trt en question implémentent une interface qui permet de les manipuler mais on ne connait pas du tout ces trt, ce qu'ils font etc... (De plus les classes de ces trt sont chargées dynamiquement).
 
Je veux limiter les nombre de threads que le serveur doit lancer.
A chaque fois que je lance un trt, je regarde si runningThreads<=maxThreads, j'incrémente runningThreads et je lance le trt.
 
Problème : n'ayant aucun contrôle sur ces trts, je ne sais pas quand ils s'arrêtent et donc quand je peux décrémenter mon compteur de threads.
Je n'ai pas la main sur le code des trt...
 
Une idée ?
 
 
 

mood
Publicité
Posté le 16-01-2004 à 15:37:32  profilanswer
 

n°613621
bill.fr
Posté le 16-01-2004 à 16:31:59  profilanswer
 

Il faut que tu gères une classe qui va compter pour toi,
 
Cette classe contiendra un compteur static
 
Chaque Thread devra décrémenter le compteur de cette classe de comptage en se fermant
 
ça s'appelle singleton il me semble comme modèle de conception...


---------------
On ne vit qu'une fois, mais pour qui sait vivre, une seule fois suffit (Merril Stubbing)
n°613632
krosso
j'suis à la bourre
Posté le 16-01-2004 à 16:35:44  profilanswer
 

Citation :

Chaque Thread devra décrémenter le compteur de cette classe de comptage en se fermant


C'est bien là que le bât blaisse...
 
Je crois qu'il va falloir que je force les pti gars qui développent les trt à envoyer un signal à la fin de leur méthode run().

n°613639
nraynaud
lol
Posté le 16-01-2004 à 16:38:46  profilanswer
 

oui, il faut qu'à la fin du run() des tâches, ils signalent la fin de la tâche, ça peut passer par un encapsulage du run() de ta tache ou du Runnable.
 
typiquement quelquepart tu auras ça :

Code :
  1. void run() {
  2.   tache.run();
  3.   decrementeNumTaches();
  4. }


 
Donne un peu plus de détails : quelle est cette interface ? tu utilises des Runnable ou des Thread ?  
Pour qu'on puisse te donner une réponse plus précise.
 
dernier détail au cas où : n'oublie pas que le seul moyen valable de tuer une tache est de terminer la méthode run(), toutes les autres sont risquées et vont être supprimées de java.


---------------
trainoo.com, c'est fini
n°613650
torpe23
Posté le 16-01-2004 à 16:45:44  profilanswer
 

Dans la java doc, y'a une methode de la class Thread qui s'appelle "isAlive()":

Code :
  1. isAlive
  2. public final boolean isAlive()
  3. Tests if this thread is alive. A thread is alive if it has been started and has not yet died.
  4. Returns:
  5. true if this thread is alive; false otherwise.


 
Je pense que ça doit être ça!


Message édité par torpe23 le 16-01-2004 à 16:46:46
n°613656
torpe23
Posté le 16-01-2004 à 16:48:20  profilanswer
 

Donc quand tu garde en mémoire un vecteur de tes threads lancés. Et quand tu veux en lancer un nouveau, si ton compteur est est au max, tu parcours ton vecteur pour voir si par hasard, y'en aurait pas un qui serait terminé!

n°613657
nraynaud
lol
Posté le 16-01-2004 à 16:50:52  profilanswer
 

houlà, on est pas sur la même planète niveau complexité.


---------------
trainoo.com, c'est fini
n°613658
krosso
j'suis à la bourre
Posté le 16-01-2004 à 16:51:22  profilanswer
 

isAlive()... comment j'ai pu passer à côté !?
Oui, je peux me servir de ça : connstruire une List de mes threads et la parcourir de temps en temps, appeler isAlive et si true => je décrémente.
 
Merci.
 
Comme dirait JCD : "je crois que c'est mes yeux"

n°613659
krosso
j'suis à la bourre
Posté le 16-01-2004 à 16:52:00  profilanswer
 

nraynaud a écrit :

houlà, on est pas sur la même planète niveau complexité.


pourquoi ?

n°613660
nraynaud
lol
Posté le 16-01-2004 à 16:54:45  profilanswer
 

krosso a écrit :


pourquoi ?

avec la bidouille isAlive, tu parcoures un tableau, avec la mienne, tu décrémentes un compteurs au bon moment.
En plus avec ton tableau tu vas garder des références sur les threads, donc limiter le GC. N'oublie pas au moins de mettre la case du tableau à null quand tu verras qu'une thread est morte.


Message édité par nraynaud le 16-01-2004 à 16:55:09

---------------
trainoo.com, c'est fini
mood
Publicité
Posté le 16-01-2004 à 16:54:45  profilanswer
 

n°613662
krosso
j'suis à la bourre
Posté le 16-01-2004 à 16:58:27  profilanswer
 

L'intérêt du isAlive() c'est que je ne dois pas intervenir dans le code des trts.
Tout ce que je connais de ces trts c'est leur interface et ses méthodes call() et run()
 
je n'ai aucun contrôle sur ce que les développeurs vont mettre dans leur méthodes run().
 
Il y a bien une spec que je vais distribuer.  
Mais même s'il est écrit n/b dans ma spec qu'il faut envoyer tel message à la fin de run(), tu peut être sûr qu'un gusse ne le fera pas et va me pourir mon compteur de threads... trop risqué.

n°613664
nraynaud
lol
Posté le 16-01-2004 à 17:00:17  profilanswer
 

krosso a écrit :

L'intérêt du isAlive() c'est que je ne dois pas intervenir dans le code des trts.
Tout ce que je connais de ces trts c'est leur interface et ses méthodes call() et run()
 
je n'ai aucun contrôle sur ce que les développeurs vont mettre dans leur méthodes run().
 
Il y a bien une spec que je vais distribuer.  
Mais même s'il est écrit n/b dans ma spec qu'il faut envoyer tel message à la fin de run(), tu peut être sûr qu'un gusse ne le fera pas et va me pourir mon compteur de threads... trop risqué.

Je t'ai dit de nous donner au moins l'interface pour te montrer comment faire le proxy qui va bien.


---------------
trainoo.com, c'est fini
n°613667
krosso
j'suis à la bourre
Posté le 16-01-2004 à 17:06:18  profilanswer
 

nraynaud a écrit :

Je t'ai dit de nous donner au moins l'interface pour te montrer comment faire le proxy qui va bien.


Merci pour ton aide, mais la solution isAlive() me convient. Du moins vais-je la tester.
 
pour l'interface :
public interface IBatch extends Runnable
{
   public void call(Classe1 truc, Classe2 truc);
}


Message édité par krosso le 16-01-2004 à 17:06:47
n°613669
benou
Posté le 16-01-2004 à 17:07:53  profilanswer
 

1) Récupérer un pool de thread dont tu fixes la taille max
 
2) faire un petit truc vite fait à la mimine :  

Code :
  1. package utils;
  2. public class ThreadPool {
  3.  
  4.    private PooledThread[] threads;
  5.    private Object lock = new Object();
  6. public ThreadPool(int maxThreads) {
  7.  this.threads = new PooledThread[maxThreads];
  8.  for (int i = 0; i < this.threads.length; i++) {
  9.   this.threads[i] = new PooledThread(i);
  10.   this.threads[i].setDaemon(true);
  11.   this.threads[i].start();
  12.  }
  13. }
  14. public synchronized void doWork(Runnable work) {
  15.       //search a ready thread
  16.  for (int i = 0; i < this.threads.length; i++) {
  17.   if (this.threads[i].isReady()) {
  18.    this.threads[i].doWork(work);
  19.    return;
  20.   }
  21.  }
  22.  // no threads found
  23.  try {
  24.   synchronized (this.lock) {
  25.    this.lock.wait();
  26.   }
  27.  } catch (InterruptedException e) {
  28.   Thread.currentThread().interrupt();
  29.   return;
  30.  }
  31.  // a thread as finished => do the work
  32.  doWork(work);
  33. }
  34. public synchronized void close() {
  35.  for (int i = 0; i < this.threads.length; i++) {
  36.   this.threads[i].end();
  37.   this.threads[i].interrupt();
  38.  }
  39. }
  40.  
  41. private class PooledThread extends Thread {
  42.  private Runnable work = null;
  43.  private boolean mustStop = false;
  44.  private boolean running = false;
  45.  public PooledThread(int nb) {
  46.   super("PooledThread " + nb);
  47.  }
  48.  public void end() {
  49.   this.mustStop = true;
  50.  }
  51.  public synchronized void doWork(Runnable work) {
  52.   if (this.work == null) {
  53.    this.work = work;
  54.    this.running = true;
  55.    this.notify();
  56.   } else {
  57.    // mauvaise utilisation
  58.    throw new RuntimeException("Thread Already running. Bad use" );
  59.   }
  60.  }
  61.  public synchronized boolean isReady() {
  62.   return ! running;
  63.  }
  64.  public void run() {
  65.   while (! mustStop) {
  66.    try {
  67.     synchronized (this) {
  68.      this.running = false;
  69.      this.work = null;
  70.      synchronized(ThreadPool.this.lock) {
  71.       //notify the pool that the trhread is ready
  72.       ThreadPool.this.lock.notify();
  73.      }
  74.      this.wait();
  75.     }
  76.    } catch (InterruptedException e) {
  77.     continue;
  78.    }
  79.    if (this.work != null) {
  80.     try {
  81.      this.work.run();
  82.     } catch (Throwable t) {
  83.      t.printStackTrace();
  84.     }
  85.     Thread.interrupted(); // clear the interrupt status
  86.    }
  87.   }
  88.        
  89.  }
  90. }
  91. /*
  92. // ------------------------------------- TEST ----------------
  93. public static void main(String[] args) throws Exception {
  94.  ThreadPool pool = new ThreadPool(3);
  95.  for (int i = 0; i < 10; i++) {
  96.   pool.doWork(new Test(i));
  97.   Thread.sleep(600);
  98.  }
  99. }
  100. public static class Test implements Runnable {
  101.  private int nb;
  102.  public Test(int nb) {
  103.   this.nb = nb;
  104.  }
  105.  
  106.  public void run() {
  107.   System.out.println("thread " + nb + "start" );
  108.   try {
  109.    Thread.sleep(2000);
  110.   } catch (InterruptedException e) {
  111.    // nothing
  112.   }
  113.   System.out.println("thread " + nb + "stop" );
  114.  }
  115. }
  116. */
  117. }


 
ca devrait marcher ...
 
edit : j'ai mit tant de temps que ca à l'écrire ce code ??? y avait pas de réponse quand j'ai commencé  [:mlc2]
edit2 : au moins 35 minutes [:w3c compliant]


Message édité par benou le 16-01-2004 à 19:04:31

---------------
ma vie, mon oeuvre - HomePlayer
n°613680
krosso
j'suis à la bourre
Posté le 16-01-2004 à 17:16:22  profilanswer
 

Diantre Benou, Je te remercie de te donner autant de mal !
 
Je te promets de regarder ça en détails.
Présentement je pars en week-end (bien mérité ma foi).
 

n°613682
nraynaud
lol
Posté le 16-01-2004 à 17:17:48  profilanswer
 

benou > quand je fais un pool, je mets une pile qui ne contient que des objets libres. ça permet d'avoir tout en O(1).
 
 
edit : et accessoirement de réutiliser en priorité l'objet le plus récement utilisé.


Message édité par nraynaud le 16-01-2004 à 17:18:57

---------------
trainoo.com, c'est fini
n°613685
benou
Posté le 16-01-2004 à 17:18:44  profilanswer
 

krosso a écrit :

Diantre Benou, Je te remercie de te donner autant de mal !


ca faisait un moment que ca me démangeait de coder ca :D
 
quand j'aurais du courage je ferai la version qui augmente son pool de thread dynamiquement ;)


---------------
ma vie, mon oeuvre - HomePlayer
n°613691
benou
Posté le 16-01-2004 à 17:23:06  profilanswer
 

nraynaud a écrit :

benou > quand je fais un pool, je mets une pile qui ne contient que des objets libres. ça permet d'avoir tout en O(1).
 
 
edit : et accessoirement de réutiliser en priorité l'objet le plus récement utilisé.


ouais je sais, je me suis pas fait chier, j'ai fait des boucles sur le tableau ... ce serait mieux avec une pile bien sûr (quoique l'implémentation Stack du JDK sux méchament)


---------------
ma vie, mon oeuvre - HomePlayer
n°613694
nraynaud
lol
Posté le 16-01-2004 à 17:27:56  profilanswer
 

benou a écrit :


ouais je sais, je me suis pas fait chier, j'ai fait des boucles sur le tableau ... ce serait mieux avec une pile bien sûr (quoique l'implémentation Stack du JDK sux méchament)

j'ai même pas regardé, j'ai vu que c'était synchronized par défaut => on prend.
mais sinon, y'a ArrayList et LinkedList.
 
 
edit : mais c'est surtout que le code est plus court avec une pile.
C'est marrant cette tendance à avoir une complexité de daube et un code plus long quand "on veut pas se faire chier", des fois ça me fait pareil.


Message édité par nraynaud le 16-01-2004 à 17:29:19

---------------
trainoo.com, c'est fini
n°613732
benou
Posté le 16-01-2004 à 19:01:00  profilanswer
 

nraynaud a écrit :

j'ai même pas regardé, j'ai vu que c'était synchronized par défaut => on prend.
mais sinon, y'a ArrayList et LinkedList.


ben ca hérite de Vector :/
 

nraynaud a écrit :


edit : mais c'est surtout que le code est plus court avec une pile.
C'est marrant cette tendance à avoir une complexité de daube et un code plus long quand "on veut pas se faire chier", des fois ça me fait pareil.


ben nan c'est pas beaucoup plus court :  

Code :
  1. package utils;
  2. import java.util.Stack;
  3. public class ThreadPool2 {
  4.  
  5. private PooledThread[] threads;
  6. //private Object lock = new Object();
  7. private Stack readyThreads;
  8. public ThreadPool2(int maxThreads) {
  9.  this.threads = new PooledThread[maxThreads];
  10.  this.readyThreads = new Stack();
  11.  this.readyThreads.ensureCapacity(maxThreads);
  12.  for (int i = 0; i < this.threads.length; i++) {
  13.   this.threads[i] = new PooledThread(i);
  14.   this.threads[i].setDaemon(true);
  15.   this.threads[i].start();
  16.  }
  17. }
  18. public synchronized void doWork(Runnable work) {
  19.  PooledThread th;
  20.  try {
  21.   synchronized (this.readyThreads) {
  22.    if (this.readyThreads.isEmpty()) {
  23.     this.readyThreads.wait();
  24.    }
  25.    th = (PooledThread) this.readyThreads.pop();
  26.   }
  27.  } catch (InterruptedException e) {
  28.   Thread.currentThread().interrupt();
  29.   return;
  30.  }
  31.  // a thread as finished => do the work
  32.  th.doWork(work);
  33. }
  34. public synchronized void close() {
  35.  for (int i = 0; i < this.threads.length; i++) {
  36.   this.threads[i].end();
  37.   this.threads[i].interrupt();
  38.  }
  39.  this.readyThreads.clear();
  40. }
  41.  
  42. private class PooledThread extends Thread {
  43.  private Runnable work = null;
  44.  private boolean mustStop = false;
  45.  public PooledThread(int nb) {
  46.   super("PooledThread " + nb);
  47.  }
  48.  public void end() {
  49.   this.mustStop = true;
  50.  }
  51.  public synchronized void doWork(Runnable work) {
  52.   if (this.work == null) {
  53.    this.work = work;
  54.    this.notify();
  55.   } else {
  56.    // mauvaise utilisation
  57.    throw new RuntimeException("Thread Already running. Bad use" );
  58.   }
  59.  }
  60.  public void run() {
  61.   while (! mustStop) {
  62.    try {
  63.     synchronized (this) {
  64.      this.work = null;
  65.      synchronized(ThreadPool2.this.readyThreads) {
  66.       //notify the pool that the thread is ready
  67.       ThreadPool2.this.readyThreads.push(this);
  68.       ThreadPool2.this.readyThreads.notify();
  69.      }
  70.      this.wait();
  71.     }
  72.    } catch (InterruptedException e) {
  73.     continue;
  74.    }
  75.    if (this.work != null) {
  76.     try {
  77.      this.work.run();
  78.     } catch (Throwable t) {
  79.      t.printStackTrace();
  80.     }
  81.     Thread.interrupted(); // clear the interrupt status
  82.    }
  83.   }
  84.        
  85.  }
  86. }
  87. /*
  88. public static void main(String[] args) throws Exception {
  89.  ThreadPool2 pool = new ThreadPool2(3);
  90.  for (int i = 0; i < 10; i++) {
  91.   pool.doWork(new Test(i));
  92.   Thread.sleep(600);
  93.  }
  94. }
  95. public static class Test implements Runnable {
  96.  private int nb;
  97.  public Test(int nb) {
  98.   this.nb = nb;
  99.  }
  100.  
  101.  public void run() {
  102.   System.out.println("thread " + nb + "start" );
  103.   try {
  104.    Thread.sleep(2000);
  105.   } catch (InterruptedException e) {
  106.    // nothing
  107.   }
  108.   System.out.println("thread " + nb + "stop" );
  109.  }
  110. }
  111. */
  112. }


---------------
ma vie, mon oeuvre - HomePlayer
n°613735
benou
Posté le 16-01-2004 à 19:04:04  profilanswer
 

au fait, j'avais oublié de mettre les thread daemon :/


---------------
ma vie, mon oeuvre - HomePlayer
n°613737
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-01-2004 à 19:09:55  profilanswer
 

[:prosterne] benou [:prosterne2]


---------------
J'ai un string dans l'array (Paris Hilton)
n°613738
torpe23
Posté le 16-01-2004 à 19:10:37  profilanswer
 

Voir aussi du coté des ThreadsGroup. Comme son nom l'indique, permet de faire des groupes de threads. Ensuite, il existe une fonction nommé "activeCount()" qui renvoie le nb de Thread qui tourne dans le groupe. Bref... A voir, quoi!


Message édité par torpe23 le 16-01-2004 à 19:11:03
n°613742
benou
Posté le 16-01-2004 à 19:12:56  profilanswer
 

torpe23 a écrit :

Voir aussi du coté des ThreadsGroup.


je me suis jamais servi de ce machin là  :sweat:


---------------
ma vie, mon oeuvre - HomePlayer
n°613743
benou
Posté le 16-01-2004 à 19:13:09  profilanswer
 


c'est fini oui ???  :D


---------------
ma vie, mon oeuvre - HomePlayer
n°613744
torpe23
Posté le 16-01-2004 à 19:13:51  profilanswer
 

moi non plus, mais ça a l'air d'être la solution pourtant!
Pkoi refaire ce que d'autre ont déja fait?!

n°613749
benou
Posté le 16-01-2004 à 19:16:22  profilanswer
 

torpe23 a écrit :

Pkoi refaire ce que d'autre ont déja fait?!  


heu non, le threadgroup n'a rien à voir avec un pool de thread ...


---------------
ma vie, mon oeuvre - HomePlayer
n°613750
torpe23
Posté le 16-01-2004 à 19:17:22  profilanswer
 

pkoi pas?

n°613759
benou
Posté le 16-01-2004 à 19:22:18  profilanswer
 


ben c'est pas les mêmes fonctionnalités, c'est tout [:spamafote]
 
Le pool de thread répond bien mieux à ton besoin. En plus, il t'évite de relancer un nouveau thread à chaque traitement : il utilise tjs les mêmes


---------------
ma vie, mon oeuvre - HomePlayer
n°613763
nraynaud
lol
Posté le 16-01-2004 à 19:25:12  profilanswer
 

benou > on était pas sur la même longueur d'onde.  
 
Bon ça devient jacky-threadpool, donc je vais étudier la solution qui m'est venue à l'esprit. Mais on est clairement sorti du "vite fait", d'un autre côté, ça peut me servir dans peu de temps.


---------------
trainoo.com, c'est fini
n°613769
chrisbk
-
Posté le 16-01-2004 à 19:30:52  profilanswer
 


 
c'est vrai qu'il est sacrement balaise benou [:icon7] meilleur que moins moins en tout cas [:icon11]

n°613770
the real m​oins moins
Posté le 16-01-2004 à 19:31:12  profilanswer
 

benou a écrit :


je me suis jamais servi de ce machin là  :sweat:  

et tu t'étonnes que je te raille quand on te prend pour un génie [:kiki]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°613771
benou
Posté le 16-01-2004 à 19:31:26  profilanswer
 

nraynaud a écrit :

benou > on était pas sur la même longueur d'onde.  


ha  :??:  
 
je vois pas ce que tu voulais dire avec la pile alors ... :/


---------------
ma vie, mon oeuvre - HomePlayer
n°613773
benou
Posté le 16-01-2004 à 19:32:10  profilanswer
 

the real moins moins a écrit :

et tu t'étonnes que je te raille quand on te prend pour un génie [:kiki]


pardon maître  [:prosterne2]


---------------
ma vie, mon oeuvre - HomePlayer
n°613777
nraynaud
lol
Posté le 16-01-2004 à 19:33:09  profilanswer
 

je vais faire un truc et tu me diras ce que tu en penses, j'ai encore quasiment rien fait avec les threads en java pour l'instant.


---------------
trainoo.com, c'est fini
n°613783
benou
Posté le 16-01-2004 à 19:37:37  profilanswer
 

nraynaud a écrit :

je vais faire un truc et tu me diras ce que tu en penses


ca roule :)


---------------
ma vie, mon oeuvre - HomePlayer
n°613837
nraynaud
lol
Posté le 16-01-2004 à 20:16:25  profilanswer
 

En fait non, laisse béton, je ferais pas mieux.
peut-être en remettant un close dans le finalize et en virant le catch universel (j'ai horreur de ça, ça fout les debuggeurs en vrac), mais sinon rien.


---------------
trainoo.com, c'est fini
n°613843
benou
Posté le 16-01-2004 à 20:31:09  profilanswer
 

nraynaud a écrit :


peut-être en remettant un close dans le finalize


ouais ...
 

nraynaud a écrit :

et en virant le catch universel (j'ai horreur de ça, ça fout les debuggeurs en vrac), mais sinon rien.


ca non, faut pas ! Si tu fais ca tu flingues tes threads au fur et à mesure !
Qu'est ce que tu voudrais mettre à la place ? De toute façon à ce niveau là tu ne peux rien faire d'autre que de stacktracer l'erreur ... C'est ce que ferais un vrai thread avant de se laisser mourrir [:spamafote] là je sauve juste mon thread :)
 
et c'est quoi le problème avec les débuggueur  :??:


Message édité par benou le 16-01-2004 à 20:32:07

---------------
ma vie, mon oeuvre - HomePlayer
n°613867
nraynaud
lol
Posté le 16-01-2004 à 20:47:07  profilanswer
 

benou a écrit :


ca non, faut pas ! Si tu fais ca tu flingues tes threads au fur et à mesure !
Qu'est ce que tu voudrais mettre à la place ? De toute façon à ce niveau là tu ne peux rien faire d'autre que de stacktracer l'erreur ... C'est ce que ferais un vrai thread avant de se laisser mourrir [:spamafote] là je sauve juste mon thread :)
 
et c'est quoi le problème avec les débuggueur  :??:  

tu laisses mourrir ton thread et tu en recrées un autre ? (dans le catch tu recrées le nouveau thread, tu règles tout au niveau du pool et tu relances l'exception).
 
Les debuggeurs s'arrêtent au point de départ de l'exception et ça permet de debugger. Sinon c'est comme swing : la merde à debugger (à coup de breakpoints dans Throwable()). Car si on bouffe l'exception, on n'a qu'une trace dans la sortie standard, un peu mince comme indice du problème.
 
Aussi j'aurais fait une création lazy (au besoin) des threads.
 
Et puis mettre un close() finalize c'est une connerie, à cause du pointeur vers l'objet englobant.


Message édité par nraynaud le 16-01-2004 à 20:49:50

---------------
trainoo.com, c'est fini
n°613920
benou
Posté le 16-01-2004 à 21:38:13  profilanswer
 

nraynaud a écrit :

tu laisses mourrir ton thread et tu en recrées un autre ? (dans le catch tu recrées le nouveau thread, tu règles tout au niveau du pool et tu relances l'exception).


et c'est quoi l'intérêt ?????
 

nraynaud a écrit :


Les debuggeurs s'arrêtent au point de départ de l'exception et ça permet de debugger. Sinon c'est comme swing : la merde à debugger (à coup de breakpoints dans Throwable()). Car si on bouffe l'exception, on n'a qu'une trace dans la sortie standard, un peu mince comme indice du problème.


??? mais ca reviendrait exactement au même que je laisse passer l'exception ... je comprend pas ce que tu veux dire ... En quoi le debuggueur se comporterait différement ?
 
si le mec veut intercepter les erreur, il peut le faire au niveau du traitement ... Quand n runnable plante, si tu laisse passer l'exception à traers le run, tu n'as plus aucun contrôle ... Donc je vois pas en quoi c'est gênent que moi je la catche après [:spamafote]
 

nraynaud a écrit :


Aussi j'aurais fait une création lazy (au besoin) des threads.


ouais, c'est ce que je disais quand je parlais d'une dynamisation du pool de thread. En même temps là, tu gagne en perf : les threads sont créés à l'initialisation => le pool est plus réactif ... Tu penses que ca vouffe bcp de ressource un thread en pause ?
 

nraynaud a écrit :


Et puis mettre un close() finalize c'est une connerie, à cause du pointeur vers l'objet englobant.


?? hein ?
c'est dans le finalize du pool qu'il faut mettre le close, pas dans les Pooled Thread.


---------------
ma vie, mon oeuvre - HomePlayer
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3
Page Précédente

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

  multithread

 

Sujets relatifs
multithread , sémaphore, linux : endormir un thread.multithread ou pas?
client serveur multithreadMultithread sous VB 6 ?
[C]Multithread 
Plus de sujets relatifs à : multithread


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)