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

Collection et Stream Java Discussion :

[Executor] Risques d'utilisation


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut [Executor] Risques d'utilisation
    Bonjour,

    Je voulais utiliser l'api concurrent pour l'exécution d'une tache asynchrone, il s'agit en fait de l'envoie de mail suite à un envoie de formulaire http. comme l'envoie de mail peut prendre un peu de temps, je voudrais retourner à la page et laisser l'envoi de mail s'effectuer dans un processus à part, voilà mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Executor executor = Executors.newSingleThreadExecutor();
    executor.execute(new Runnable() {
       public void run() {
    MailManager.confirmCreation(instance);
      }
    });
    Est ce qu'il y'a un risque de dead lock ou d'autres problèmes en utilisant cette API ?

    Merci

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Sniper37 Voir le message
    Est ce qu'il y'a un risque de dead lock ou d'autres problèmes en utilisant cette API ?
    Les risques ne sont pas lié aux Executors en eux-mêmes, mais plutôt à ton code.

    Comme tout éléments qui pourrait être utilisé depuis plusieurs threads, il faut s'assurer que le tout est bien thread-safe.

    En clair il faudrait avoir ton code et s'attarder sur tous les objets qui sont partagé par ta méthode (le paramètre "instance" pour commencer, mais également des éventuelles données static...)

    a++

  3. #3
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    oui justement j'ai pas mal de variables statiques dans la classe static. la variable instance est une variable déclarée à l'intérieur de la méthode.

  4. #4
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    risque possible: engorgement quand les threads "fournisseurs" donnent plus de tâches à traiter que le Thread exécuteur ne peut traiter séquentiellement ... la queue d'attente grossit grossit ....
    mais c'est un cas particulier qui dépend de la nature des tâches .

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    oui justement j'ai pas mal de variables statiques dans la classe static. la variable instance est une variable déclarée à l'intérieur de la méthode.
    Donc il faut que tu t'assures que tout cela soit thread-safe, c'est à dire que tout les éléments partagés soient :
    • utilisable de manière thread-safe (voir la documentation de la classe).
    • immuable (String, Integer, etc.), car cela implique le coté thread-safe.
    • synchronisé manuellement par ton code.



    Maintenant sans code c'est difficile de t'aider...

    a++

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Donc il faut que tu t'assures que tout cela soit thread-safe, c'est à dire que tout les éléments partagés soient :
    • utilisable de manière thread-safe (voir la documentation de la classe).
    • immuable (String, Integer, etc.), car cela implique le coté thread-safe.
    • synchronisé manuellement par ton code.



    Maintenant sans code c'est difficile de t'aider...

    a++
    Donc, ce n'est pas une solution à mettre en place sans prendre en compte le reste du code, le but c'était juste de redonner la main à l'utilisateur et laisser le mail se traiter par un autre thread.
    Je dois déclarer des fonctions synchronisées, changer les StringBuilder en StringBuffer...et revoir un peu les principes de synchronisations .
    Je me pencherais plus sur le code en question et si j'ai un souci, je n'hésiterais pas à ré-ouvrir la discussion


  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Cela dépend fortement de ton code et de la manière dont tu partages les données.

    Tout synchroniser n'est pas forcément la meilleure solution non plus. On peut également éviter au maximum le partage de données afin de travailler sur des objets locaux au maximum...

    a++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 16
    Dernier message: 01/09/2011, 15h52
  2. Réponses: 7
    Dernier message: 13/05/2011, 10h28
  3. Réponses: 15
    Dernier message: 27/03/2009, 13h37
  4. Risque de l'utilisation de cascade delete
    Par Lucas Panny dans le forum SQL
    Réponses: 13
    Dernier message: 02/10/2008, 15h59
  5. [Sécurité] Risques dans l'utilisation d'une session
    Par ChriGoLioNaDor dans le forum Langage
    Réponses: 3
    Dernier message: 30/04/2007, 11h47

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