IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Concurrence et multi-thread Java Discussion :

Teste si un thread existe déjà.


Sujet :

Concurrence et multi-thread Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2006
    Messages : 80
    Par défaut Teste si un thread existe déjà.
    Bonjour,


    Je développe une application réseau de monitoring de bases de données. Pour ce, je crée, pour chaque DB que j'ai à monitorer, un thread qui à intervalles réguliers check que des DML sont toujours faisables sur ces DB.

    Le truc c'est que j'aimerais tester si un thread pour une DB existe déjà ?

    Cette appli va monitorer plus de 1000 DB, elle est configurable via un fichier de configuration qui peut être changé à tout moment, 'fin soit, j'ai besoin de temps à autre de pouvoir "recharger" un thread "sur" une DB avec de nouvelles valeurs.

    Le fichier de configuration n'est lu que la première fois que l'appli démarre et les threads tourneront indéfiniment. Donc toutes les données du fichier de config sont chargées en mémoire. Du coup si on veut modifier quelque chose dans le fichier de config pour une raison ou un autre, une DB qui change d'url, patati patata, on doit pouvoir RECHARGER le service avec les nouvelles valeurs.

    (programme en LIGNES DE COMMANDES)

    Alors ce que j'aimerais pouvoir faire c'est: lorsqu'on load() un nouveau thread, checker qu'il n'existe pas déjà un thread qui s'occupe d'une DB, si oui, le tuer, puis charger le "nouveau".

    Y'a mouyen de faire ça ? Comment on fait ?

    Merci à tous.

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Tu utilises une Map: comme clé, tu utilises un identifiant unique pour la base de données testée, et en valeur, tu places ton Thread (ou une classe jouant un rôle équivalent).

    Il te suffit d'interroger cette Map pour savoir si tu as déjà un Thread sur une base...
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Par défaut
    Juste une petite remarque: un trop grand nombre de threads peut-être très pénalisant pour un programme.

    Je te conseille donc d'avoir un nombre definit à l'avance de threads qui pollent les DB.

    Avec un ThreadPoolExecutor ca ne devrait poser aucun problème.

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2006
    Messages : 80
    Par défaut
    Merci pour ta réponse CyberChouan, j'ai jamais utilisé les Map mais je vais m'y pencher

    @elmor: Oserais-je te demander de développer ce que tu me dis ?
    Parce que ça me paraît important. Actuellement j'ai un thread qui s'occupe d'une DB... ce qui veut dire un peu moins de 1000 threads au finish. Ca fait ptetre beaucoup mais bon... j'aimerais piger ^^

    Merci

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Par défaut
    Globalement, il est important de faire la difference entre Hardware thread et software threads. Les threads hardware sont les resources physique de la machine. Il peut y avoir un ou plusieurs threads hard par core d'un processeur (par exemple intel avec l'hyper threading).

    Quand il y a plus de threads soft que de thread hard, the system d'exploitation passe d'un thread soft à l'autre. Cette technique permet à tout les threads soft de progresser.

    Malheureusement le switch de thread n'est pas anodin, car le systeme d'exploitation doit faire:
    * sauvegarde l'ancien contexte de ton thread
    * sauver/restaurer le cached des threads

    Chaque thread a sa propre stack (par defaut 512K).

    Donc le problème vient que beaucoup de threads usent beaucoup de mémoire. Si tout tes thread partent en même temps ==> il peut y avoir plus de 1000 connection à un instant "t". Donc enormement de resources de prises.

    Donc par exemple si tu veux pouvoir faire 50 ping en même temps:
    un threadpool de 50 suffit.

    De plus si tu dois faire des ping à intervalle regulier tu peux aussi aller voir du coté d'un ScheduledThreadPoolExecutor.

    Enfin tout dépend de tes besoins...

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2006
    Messages : 80
    Par défaut
    J'avais pas du tout prévu ça moi :s

    Bon merci pour vos réponses les gars. Je vous tiens au courant. J'vais voir du côté des ThreadPool et des Map.

Discussions similaires

  1. Test d'un thread
    Par nadsky dans le forum Général Java
    Réponses: 5
    Dernier message: 22/05/2008, 14h16
  2. test si une valeur existe dans un tableau
    Par Maria1505 dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 15/08/2007, 17h10
  3. JUnit Test type does not exist
    Par theAlex dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 10/07/2007, 13h13
  4. [XML] Teste si un attribut existe
    Par jbrasselet dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 04/07/2007, 12h55
  5. test si une form existe déjà
    Par coucoucmoi dans le forum Composants VCL
    Réponses: 5
    Dernier message: 09/12/2003, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo