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 :

[Thread] synchronised (MyObject.class)


Sujet :

Concurrence et multi-thread Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Par défaut [Thread] synchronised (MyObject.class)
    Bonjour,

    Dans une appli, un serveur va à chaque requête recu d'un client générer un thread pour la traiter.
    Ce thread utilise entre autre l'instruction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    XPathFactory factory = XPathFactory.newInstance();
    XPathFactory.newInstance() n'étant pas synchronisé, il faut donc que je le fasse à mon niveau. Seulement je n'ai pas de mutex général.
    JE voulais donc savoir, si effectuer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    synchronised(XpathFactory.class)
            factory = XPathFactory.newInstance();
    [/code]

    permettait cette synchro ? Ou s'il y avait plus simple/propre ?
    Utiliser par exemple une variable de class static servant de mutex est il plus propre ?

  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,


    Tu peux très bien utiliser la classe comme mutex. C'est même très propre à mon avis !
    D'ailleurs c'est ce qui est utilisé lorsque tu définis une méthode static synchronized...


    Par contre je ne pense pas qu'il y ait besoin de synchronisé les newInstance() !

    a++

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Par défaut
    D'accord merci.
    Par contre pourquoi penses tu qu'une synchro n'est pas nécessaire ?

    Je ne maitrise pas encore tous les concepts de synchro, mais quand je regarde le code de la fonction newInstance, elle me ne semble pas thread safe, si ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
     
     public static final XPathFactory newInstance(final String uri)
            throws XPathFactoryConfigurationException {
     
            if (uri == null) {
            	throw new NullPointerException(
            		"XPathFactory#newInstance(String uri) cannot be called with uri == null"
            	);
            }
     
    		if (uri.length() == 0) {
    			throw new IllegalArgumentException(
    				"XPathFactory#newInstance(String uri) cannot be called with uri == \"\""
    			);
    		}
     
    		ClassLoader classLoader = ss.getContextClassLoader();
     
            if (classLoader == null) {            
                //use the current class loader
                classLoader = XPathFactory.class.getClassLoader();
            } 
     
    		XPathFactory xpathFactory = new XPathFactoryFinder(classLoader).newFactory(uri);
     
    		if (xpathFactory == null) {
    			throw new XPathFactoryConfigurationException(
    				"No XPathFactory implementation found for the object model: "
    				+ uri
    			);
    		}
     
    		return xpathFactory;
        }

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Qu'est-ce qui te fait penser que cette méthode n'est pas ThreadSafe. Elle ne modifie que des variables locales, et ne fait que des appels à new ou des appels au classloader.

  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 tchize_ Voir le message
    Qu'est-ce qui te fait penser que cette méthode n'est pas ThreadSafe. Elle ne modifie que des variables locales, et ne fait que des appels à new ou des appels au classloader.
    +1


    Un code thread-safe n'implique pas forcément une synchronisation.


    a++

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 104
    Par défaut
    Salut,

    la méthode newInstance() te renvoie une nouvelle instance (comme son nom l'indique) mais pas la même instance à chaque appel (ce n'est pas un singleton).
    Il n'y a pas besoin de synchroniser cette méthode pour ce fonctionnement.
    Après si tu veux un singleton, c'est à toi de gérer la création de cette instance mais aussi de vérifier que la classe XPathFactory est thread-safe

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

Discussions similaires

  1. thread dédié à une classe pour lui "donner vie"
    Par Dje14 dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 02/06/2005, 16h46
  2. Réponses: 1
    Dernier message: 23/05/2005, 15h52
  3. [Thread] synchronisation globale
    Par guejo dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 16/02/2005, 11h56
  4. [Thread][Synchronisation] Exclusion mutuelle
    Par masto dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 20/01/2005, 16h02
  5. Thread dans une classe ?
    Par Sephi dans le forum Threads & Processus
    Réponses: 7
    Dernier message: 07/03/2004, 18h16

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