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

Java Discussion :

similaire au singleton pour un thread ?


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2010
    Messages : 111
    Par défaut similaire au singleton pour un thread ?
    Bonjour,

    Je viens de découvrir qu'on peut utiliser en JAVA des threads donc excusez moi par avance si ma question vous parait simple.

    Je voudrai dans une méthode lancer dans un nouveau thread un UPDATE important de base de données ... (ça c'est bon ça fonctionne)

    Ma question est comment faire pour ne pas lancer ce nouveau thread s'il y en a déjà un de lancé ? (faire une sorte de singleton)

    Merci par avance pour votre aide ?

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il y a différents moyens de faire ça avec un thread. Cela dépend un peu de ce que tu cherches à faire :
    • mettre en attente l'update, en attendant que le premier soit terminé ;
    • ne pas faire cet update, s'il y en a en cours ;
    • autres...


    Mais ce sera toujours plus ou moins complexe, selon les cas. La solution d'utiliser un ExecutorService, comme un Single Thread Executor, te permettra très facilement, de faire tes updates les uns après les autres.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre très actif Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 940
    Par défaut
    Cela n'empêchera pas le même UPDATE d'être exécuté à partir d'une autre machine...
    .

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2010
    Messages : 111
    Par défaut
    Merci pour vos réponses

    Pour expliquer un peu plus ce que je cherche à faire

    Cette méthode (qui lance ce nouveau thread) est appelée lorsqu'une personne modifie une ligne sur une appli en FLEX...
    Elle update par un SQL une ligne dans une table puis lance deux méthodes qui font des cumuls et des calculs pour maintenir la table à jour.

    Maintenant modifier une ligne sur l'appli met 2 secondes donc si un utilisateurs modifie 100 lignes, ça me lance 100 fois pour l'instant le même update

    Donc j'aimerai trouver une solution pour empêcher qu'un UPDATE se réalise s'il y en a déjà un en attente ...

    Et le fait de lancer cet update dans un nouveau THREAD est intéressant car ça me permet de rendre la main a l'appli FLEX avant que ne soit réalisé l'UPDATE.

    Si vous avez des pistes je suis preneur

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par siriu Voir le message
    Elle update par un SQL une ligne dans une table puis lance deux méthodes qui font des cumuls et des calculs pour maintenir la table à jour.
    Je ne comprends pas : on update un enregistrement, on fait des calculs, puis on update le même enregistrement ? C'est ça ?

    Citation Envoyé par siriu Voir le message
    Maintenant modifier une ligne sur l'appli met 2 secondes donc si un utilisateurs modifie 100 lignes, ça me lance 100 fois pour l'instant le même update
    Les questions a se poser déjà c'est pourquoi :
    1. il faut autant de temps pour modifier 100 lignes ?
      C'est le calcul qui prend autant de temps ? Pourquoi doit-on mettre à jour les données avant le calcul ?
    2. Pourquoi une mise à jour ferait 100 fois la mise à jour ?
      Normalement, si l'utilisateur modifie une donnée, cela doit faire un seul update. S'il modifie 100 lignes, cela doit faire 100 updates d'enregistrement différents à priori (qui peut correspondre à un seule update dans un cas particulier mais qui pour la plupart du temps correspond bien à 100 updates). A moins qu'il ne s'agisse d'une autre table, dans laquelle on stocke des données résultantes d'un calcul sur ces 100 lignes (comme une ligne de total sur un facture par exemple) ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2010
    Messages : 111
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Je ne comprends pas : on update un enregistrement, on fait des calculs, puis on update le même enregistrement ? C'est ça ?
    En fait l'application FLEX affiche des lignes venant d'une table SQL à un utilisateur.
    Celui-ci peut en fonction de ses besoins les modifier.
    S'il modifie une ligne, celle ci est UPDATE dans la table SQL par une méthode JAVA.
    La ligne modifiée fait partie de différents résultats aggrégée et calculé, donc après update, l'application refait tourner les calculs et les aggrégations.


    Citation Envoyé par joel.drigo Voir le message
    J
    Les questions a se poser déjà c'est pourquoi :
    1. il faut autant de temps pour modifier 100 lignes ?
      C'est le calcul qui prend autant de temps ? Pourquoi doit-on mettre à jour les données avant le calcul ?
    1. Lorsque je parles de 2 secondes, c'est coté application client FLEX, l'utilisateur qui modifie une ligne peut passer que 2 secondes sur la ligne.

      Après celle-ci est updatée dans la base de données puis les calculs se font...

      Citation Envoyé par joel.drigo Voir le message
      J
    2. Pourquoi une mise à jour ferait 100 fois la mise à jour ?
      Normalement, si l'utilisateur modifie une donnée, cela doit faire un seul update. S'il modifie 100 lignes, cela doit faire 100 updates d'enregistrement différents à priori (qui peut correspondre à un seule update dans un cas particulier mais qui pour la plupart du temps correspond bien à 100 updates). A moins qu'il ne s'agisse d'une autre table, dans laquelle on stocke des données résultantes d'un calcul sur ces 100 lignes (comme une ligne de total sur un facture par exemple) ?
Là actuellement, si l'utilisateur modifie 100 lignes sur l'application FLEX va après chaque ligne modifié lancer 1 update de la ligne dans la base puis refaire les aggrégations et les calculs 100 fois également pour toute la base...

L'idée serait de ne les lancer les aggréations et calculs qu'a la dernière ligne modifiée par l'utilisateur...

Je précise que coté FLEX les même calculs et aggrégations se font pour l'affichage de l'utilisateur, donc cela ne lui changera rien si ce n'est fait sur la partie

  • #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    C'est sûr, mais je ne vois pas le rapport. La question; telle qu'elle est posée, est de savoir comment éviter que la tâche faite par le thread puisse être appelée de manière concurrente. En tout cas, c'est comme ça que je l'ai comprise. Je suppose que c'est pour éviter d'utiliser la même connexion pour les 2 updates, au lieu d'utiliser un pool. A ce propos, la méthode par ExecutorService est applicable à n'importe quelle type de tâche.
    S'il est question d'éviter de faire 2 updates des mêmes données en même temps, c'est sûr que ce n'est pas comme ça qu'il faut aborder la chose : il y a les transactions pour ça !
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  • + Répondre à la discussion
    ActualitésFAQs JavaTutoriels JavaLivres JavaSources JavaOutils, EDI & API JavaJavaSearch

    Discussions similaires

    1. Réponses: 7
      Dernier message: 03/04/2007, 16h30
    2. Je n'arrive pas à faire sans stop() pour un thread
      Par PaladinFr dans le forum Concurrence et multi-thread
      Réponses: 2
      Dernier message: 15/03/2007, 14h37
    3. [SOURCE][SDL][OPENGL]Singleton pour gérer le fenêtrage
      Par shenron666 dans le forum Contribuez
      Réponses: 26
      Dernier message: 24/08/2006, 11h01
    4. Librairie OO et portable pour RegExp, Thread, Sockets, etc..
      Par Swoög dans le forum Bibliothèques
      Réponses: 29
      Dernier message: 27/05/2006, 12h29
    5. Plusieurs instances d'un singleton pour plusieurs modules
      Par zoubidaman dans le forum C++Builder
      Réponses: 10
      Dernier message: 18/11/2005, 01h44

    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