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

  FORUM HardWare.fr
  Programmation
  Java

  J'ai du mal avec les synchronizations. Heeeelp

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

J'ai du mal avec les synchronizations. Heeeelp

n°474826
El_gringo
Posté le 01-08-2003 à 17:11:45  profilanswer
 

Bon, c'est surement très bateau, mais tant pis, ça me saoule, j'arrive pas.
Voila le bout de code suivant :

Code :
  1. public static void Log (LDSLevel _level, int _iMsgId, JLDSVisitor _visitor, int _iCounterValue, String _strMessage) {
  2.         // Si le niveau de log n'autorise pas le log de la priorité donnée, pas la peine de tenter
  3.         if (JLDSExploitLog.getInstance().s_exploitLogger.isEnabledFor(_level)) {
  4.             // Si le compteur à été initialisé, récupère la durée
  5.             long lDuree     = _visitor.stopCounter2GetValue();
  6.             SimpleDateFormat dateFormat = new SimpleDateFormat("HHmmssSSS" );
  7.             String strDuree = dateFormat.format(new Date (lDuree));
  8.             String counter;
  9.             if (_iCounterValue == JLDSExploitLog.NO_COUNTER)
  10.                 counter = "";
  11.             else
  12.                 counter = Integer.toString(_iCounterValue);
  13.             // Renseigne les infos utilisées par le PaternLayout
  14.             JLDSExploitLog.MDCPut (_visitor.getUtilisateur().toString(), _visitor.GetIpAdress(),
  15.                     _visitor.getCurrentDocum().toString(), _visitor.getCurrentAppli().toString(), strDuree, counter,
  16.                     Integer.toString(_level.toLdsInteger()), Integer.toString(_iMsgId));
  17.             // Envois de la demande de log
  18.             JLDSExploitLog.getInstance().s_exploitLogger.log(_level, StringUtils.MakeNoLongerThan(_strMessage, 255));
  19.             // Retire les infos utilisées par le PaternLayout
  20.             JLDSExploitLog.MDCRemove();
  21.         }
  22.     }

 
 
ça se passe dans nu singleton (JLDSExploitLog).
Cette méhode étant statique, dans une appli multi threadée, il faut que je synchronize qqch. Je voudrais synchroniser le moins possible, évidement, mais je n'sais pas comment me servir de ce "synchronized"...

mood
Publicité
Posté le 01-08-2003 à 17:11:45  profilanswer
 

n°474832
Krueger
tout salaire demande dutravail
Posté le 01-08-2003 à 17:16:18  profilanswer
 

Tu peux tenter de synchroniser sa classe (java.lang.Class).


Message édité par Krueger le 01-08-2003 à 17:18:13
n°474928
R3g
fonctionnaire certifié ITIL
Posté le 01-08-2003 à 19:03:06  profilanswer
 

Ca depends si les objets d'autres classes utilisent ton singleton. Sinon tu peux faire :

Code :
  1. synchronized(this){
  2.     JLDSExploitLog.MDCPut(....
  3.     .....
  4.     JLDSExploitLog.MCDRemove();
  5. }


Mais je suis pas un pro de cs choses-là no plus.

n°476154
benou
Posté le 03-08-2003 à 10:58:00  profilanswer
 

Krueger a écrit :

Tu peux tenter de synchroniser sa classe (java.lang.Class).


el_gringo, c'est aps évident à dire comme ca où tu dois placer ton bloc synchronized ... ca dépend de ce qui doit être executé en mono-threadé ...
 
 
Si ta méthode n'était pas statique, tu pourrait faire un bloc synchronized sur this comme le disait R3g ...
 
Souvent, quand la méthode est statique, comme on a pas de "this", on gère la synchronization sur l'objet Class de l'objet genre :  
 

Code :
  1. synchronized(leNomDeTaClasse.class){
  2.    .....
  3. }


mais perso j'aime pas comme méthode parce que cet objet class est atteignable de partout dans la JVM => rien n'empeche un autre objket ailleur dans le programme de se synchronizer sur ce même objet class (même si ce serait vraiment bizarre) et donc de flinguer le comportement de ton objet
 
Moi dans ces cas là, je déclarre un objet bidon qui servira de verrou :
 

Code :
  1. ...
  2. private static final Object lock = new Object();
  3. ...
  4.    synchronized(lock) {
  5.       ...
  6.    }
  7. ...


Message édité par benou le 03-08-2003 à 11:05:17

---------------
ma vie, mon oeuvre - HomePlayer
n°476630
Wu gui
Posté le 04-08-2003 à 00:42:32  profilanswer
 

El_gringo a écrit :

Je voudrais synchroniser le moins possible, évidement, mais je n'sais pas comment me servir de ce "synchronized"...

j'avais lu un article tres interessant à ce sujet ... qui en fait démystifiait le synchronized et son mythe(donc) associé à sa lenteur/lourdeur... j'essaie de le retrouver ;)
 
ha ben le voila:
http://www-106.ibm.com/developerwo [...] 04223.html


---------------
...
n°476692
El_gringo
Posté le 04-08-2003 à 09:34:29  profilanswer
 

benou a écrit :


Moi dans ces cas là, je déclarre un objet bidon qui servira de verrou :
 

Code :
  1. ...
  2. private static final Object lock = new Object();
  3. ...
  4.    synchronized(lock) {
  5.       ...
  6.    }
  7. ...




 
Mais ça, ça empêche un accès multi threadé à tous le contenu du bloc ? je croyais que ça empêchais juste à plusieurs threads d'opérer sur "lock" en meme temps...

n°476700
Krueger
tout salaire demande dutravail
Posté le 04-08-2003 à 09:47:05  profilanswer
 

benou > :jap:
 
Wu gui > Excellent article. Ça me rappelle un certain Michael Jackson (pas sûr du nom, j'ai égaré le bouquin qui le citait) qui proposait deux règles en Java :
1. N'optimise pas.
2. N'optimise pas encore.
 
El_gringo > Que veux-tu dire par "opérer" ? Si c'est synchroniser dessus, c'est bien le cas, puisque cet objet est privé, en supposant qu'il n'ait pas de getter.

n°476702
El_gringo
Posté le 04-08-2003 à 09:49:16  profilanswer
 

Krueger a écrit :

benou > :jap:
 
Wu gui > Excellent article. Ça me rappelle un certain Michael Jackson (pas sûr du nom, j'ai égaré le bouquin qui le citait) qui proposait deux règles en Java :
1. N'optimise pas.
2. N'optimise pas encore.
 
El_gringo > Que veux-tu dire par "opérer" ? Si c'est synchroniser dessus, c'est bien le cas, puisque cet objet est privé, en supposant qu'il n'ait pas de getter.


 
Mais en synchronizant comme ça donc, j'empêche tout accès simultané daans ce bloc, c ça ?

n°476709
Krueger
tout salaire demande dutravail
Posté le 04-08-2003 à 09:55:29  profilanswer
 

Oui oui c'est bien ça.

n°476750
benou
Posté le 04-08-2003 à 10:50:52  profilanswer
 

El_gringo a écrit :


Mais ça, ça empêche un accès multi threadé à tous le contenu du bloc ? je croyais que ça empêchais juste à plusieurs threads d'opérer sur "lock" en meme temps...


 :heink: ca revient exactement au même tes 2 phrases ...
 
Chaque objet a un jeton. Quand un thread se synchronize sur un objet, il prend le jeton de l'objet et execute le bloc. Si un autre thread se synchronize sur le même objet, il doit attendre que l'autre thread ait relaché le jeton. Là il pourra le prendre, et executer le bloc, etc ....


---------------
ma vie, mon oeuvre - HomePlayer
mood
Publicité
Posté le 04-08-2003 à 10:50:52  profilanswer
 

n°476773
El_gringo
Posté le 04-08-2003 à 11:21:43  profilanswer
 

benou a écrit :


 :heink: ca revient exactement au même tes 2 phrases ...
 
Chaque objet a un jeton. Quand un thread se synchronize sur un objet, il prend le jeton de l'objet et execute le bloc. Si un autre thread se synchronize sur le même objet, il doit attendre que l'autre thread ait relaché le jeton. Là il pourra le prendre, et executer le bloc, etc ....


 
Ouais, évidement. J'pensais un peu "tordu".
Ben, merci alors. :hello:

n°476816
Wu gui
Posté le 04-08-2003 à 12:22:18  profilanswer
 

Krueger a écrit :

Wu gui > Excellent article. Ça me rappelle un certain Michael Jackson (pas sûr du nom, j'ai égaré le bouquin qui le citait) qui proposait deux règles en Java :
1. N'optimise pas.
2. N'optimise pas encore.

[:sisicaivrai]
 
et puis il ne me semble pas que l'article dise de ne pas optimiser, mais simplement qu'il demystifie le synchronized. la synchro autour d'un objet comme la propose benou me parait claire, mais dans d'autre cas, certains pourrait arriver à du code totalement tordu pour... rien ou presque...
 


---------------
...
n°476820
Krueger
tout salaire demande dutravail
Posté le 04-08-2003 à 12:26:27  profilanswer
 

Oui, mais ça allait dans le même sens à mon avis : optimiser seulement quand c'est nécessaire.

n°476823
Wu gui
Posté le 04-08-2003 à 12:30:45  profilanswer
 

euh mais en fait ta réponse était serieuse alors? c'est qui ce michael jackson? devrait changer de nom, ça fait pas serieux :p


---------------
...
n°476934
Krueger
tout salaire demande dutravail
Posté le 04-08-2003 à 14:00:05  profilanswer
 

Arf, désolé, j'aurais du le préciser. :D Je m'en souviens justement parce qu'un tel nom dans ce milieu, ça marque forcément. D'après mes souvenirs, le bouquin dont je parle donne des conseils concernant les conventions de codage. C'est un bouquin en anglais.


Message édité par Krueger le 04-08-2003 à 14:02:23
n°476963
Wu gui
Posté le 04-08-2003 à 14:27:58  profilanswer
 

ok :D


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

  J'ai du mal avec les synchronizations. Heeeelp

 

Sujets relatifs
Programmation Macro pour Powerpoint HEEEELPheeeelp ! programmation graphique
HEEEELP, pliz (VBA Excel) 
Plus de sujets relatifs à : J'ai du mal avec les synchronizations. Heeeelp


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