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

  FORUM HardWare.fr
  Programmation
  Java

  (Simple)DateFormat et synchronisation

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Page Précédente
Auteur Sujet :

(Simple)DateFormat et synchronisation

n°844096
the real m​oins moins
Posté le 07-09-2004 à 12:41:15  profilanswer
 

Salut,
 
Sur http://java.sun.com/j2se/1.4.2/doc [...] ormat.html je lis:

Citation :

Synchronization
 
Date formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally.
 


 
Quelqu'un pourrait-il m'en dire plus? Quelles pourraient etre les conséquences? Quelqu'un a-t-il déjà vécu le problème?
 
Merci d'avance


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
mood
Publicité
Posté le 07-09-2004 à 12:41:15  profilanswer
 

n°844151
uriel
blood pt.2
Posté le 07-09-2004 à 13:37:41  profilanswer
 

je trouve pas ca pratique, une instance par thread :/
 
edit: [:drapo]


Message édité par uriel le 07-09-2004 à 13:37:52

---------------
IVG en france
n°844157
the real m​oins moins
Posté le 07-09-2004 à 13:44:19  profilanswer
 

boah en meme temps ici y'a un imbécile qui a fait un  
public static SimpleDateFormat dateFormat = ...  
alors bon, faut pas s'étonner maintenant :o
 
(et je m'abstiendrai de nommer l'imbécile sus-mentionné :ange:)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°844234
benou
Posté le 07-09-2004 à 14:52:15  profilanswer
 

http://jakarta.apache.org/commons/ [...] Utils.html
 
attention : le parse de FastDateFormat n'est pas implémenté : seulement le format ...


---------------
ma vie, mon oeuvre - HomePlayer
n°844246
the real m​oins moins
Posté le 07-09-2004 à 15:01:30  profilanswer
 

benou a écrit :


attention : le parse de FastDateFormat n'est pas implémenté : seulement le format ...

ben moi je fais du parse, pas d'pot :D


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°844270
benou
Posté le 07-09-2004 à 15:21:07  profilanswer
 

the real moins moins a écrit :

ben moi je fais du parse, pas d'pot :D


dommage :)
 
fait un new à chaque fois, tant pis ... (moi c'est ce que je fais)


---------------
ma vie, mon oeuvre - HomePlayer
n°844273
the real m​oins moins
Posté le 07-09-2004 à 15:22:46  profilanswer
 

ou je synchronise la methode qui utilise le dateFormat.
 
Là je viens d'essayer de produire le problème avec 500 threads, mais ça le fait pas [:mlc]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°844278
the real m​oins moins
Posté le 07-09-2004 à 15:27:21  profilanswer
 

bon jme demande si j'ai pas merdé dans mes faux threads moi :whistle:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°844325
benou
Posté le 07-09-2004 à 16:54:45  profilanswer
 

le coup du sycnhronize moi j'hésiterais ... si c'est un objet "central", ca va te créer un méchant goulot d'étranglement ...


Message édité par benou le 07-09-2004 à 17:35:05

---------------
ma vie, mon oeuvre - HomePlayer
n°844419
the real m​oins moins
Posté le 07-09-2004 à 18:21:04  profilanswer
 

légende urbaine :o
on parle d'une transaction en base qui locke un objet ou un truc du genre hein, juste un pauvre parse de date... jveux dire créer la nouvelle instance à chaque appel sera probablement au moins aussi couteux... nan? :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
mood
Publicité
Posté le 07-09-2004 à 18:21:04  profilanswer
 

n°844426
benou
Posté le 07-09-2004 à 18:32:56  profilanswer
 

the real moins moins a écrit :

légende urbaine :o
on parle d'une transaction en base qui locke un objet ou un truc du genre hein, juste un pauvre parse de date... jveux dire créer la nouvelle instance à chaque appel sera probablement au moins aussi couteux... nan? :o


ben comme je te disais ca dépend. Si c'est une méthode d'un objet qui est fortement solicitée depuis différents threads, ca risque de ralentir globalement ton système.
 
j'ai jamais benché ce genre de truc, mais moi, je préfère limiter au maximum les ressources partagées ... Tant que je peux et que c'est pas trop gourmand en mémoire, chaque thread est indépendant et a ses propres données.


---------------
ma vie, mon oeuvre - HomePlayer
n°844428
the real m​oins moins
Posté le 07-09-2004 à 18:37:27  profilanswer
 

ouais. mtnt que j'y pense c'est l'objet qui a ce DateFormat (et donc la methode que je voulais synchronizer) qui est lui meme threadé. donc suffirait que je vire le static, une instance de mon DateFormat par instance de mon Bidule ça sera bon, et je synchronize la methode des fois que y'aurait plusieurs appels depuis d'autres threads vers mon Bidule.
 


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°844432
benou
Posté le 07-09-2004 à 18:45:59  profilanswer
 

moi je synchronizerais pas dans ce cas, mais j'indiquerais que l'objet n'est pas thread-safe. Un peu comme c'est fait pour SimpleDateFormat, quoi ...


---------------
ma vie, mon oeuvre - HomePlayer
n°844435
the real m​oins moins
Posté le 07-09-2004 à 18:47:32  profilanswer
 

et tu crois que je controle les threads de jboss moi? :p


Message édité par the real moins moins le 07-09-2004 à 18:47:40

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°844437
the real m​oins moins
Posté le 07-09-2004 à 18:48:22  profilanswer
 

bon à part ça si qqun arrive à produire une erreur de parsing en faisant du multi thread avec un SimpleDateFormat partagé entre les threads ça m'interesse parce que moi j'y arrive pas :p


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°844438
the real m​oins moins
Posté le 07-09-2004 à 18:49:12  profilanswer
 

allez, je réessaie avec 50000 threads [:banzai]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°844447
the real m​oins moins
Posté le 07-09-2004 à 18:59:56  profilanswer
 

euh ouais ça marcherait ptet mieux si j'appelais Thread.start() au lieu de .run() [:kiki]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°844448
lorill
Posté le 07-09-2004 à 19:01:49  profilanswer
 

[:forummp3]

n°844451
the real m​oins moins
Posté le 07-09-2004 à 19:04:12  profilanswer
 

probleme reproduit.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°844453
the real m​oins moins
Posté le 07-09-2004 à 19:09:15  profilanswer
 

Code :
  1. import java.text.ParseException;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. public class TestDateFormat {
  5.     /* the devil responsible for our pains */
  6.     private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" );
  7.     /* some test date */
  8.     private String dateStr = "2004-07-09 14:16:18";
  9.     private TestDateFormat() {
  10.     }
  11.     private void proofOfEvil() {
  12.         int numThreads = 50;
  13.         Thread[] threads = new Thread[numThreads];
  14.         Pouet[] pouets = new Pouet[numThreads];
  15.         for (int t = 0; t < numThreads; t++) {
  16.             pouets[t] = new Pouet();
  17.             threads[t] = new Thread(pouets[t]);
  18.         }
  19.         System.out.println("created threads" );
  20.         for (int t = 0; t < threads.length; t++) {
  21.             threads[t].start();
  22.         }
  23.         System.out.println("started threads" );
  24.         System.out.println("finished running all threads" );
  25.         for (int t = 0; t < pouets.length; t++) {
  26.             Pouet pouet = pouets[t];
  27.             Date date = pouet.getDate();
  28.             String result = dateFormat.format(date);
  29.             if (!(dateStr.equals(result))) {
  30.                 System.out.println("!! date[" + t + "] = " + result + ", expected= " + dateStr);
  31.             }
  32.         }
  33.     }
  34.     private class Pouet implements Runnable {
  35.         private Date date;
  36.         public void run() {
  37.             try {
  38.                 for (int j = 0; j < 5000; j++) {
  39.                     date = dateFormat.parse(dateStr);
  40.                     String result = dateFormat.format(date);
  41.                     if (!(dateStr.equals(result))) {
  42.                         System.out.println("in thread !! j = " + j + ", result = " + result + ", expected=" + dateStr);
  43.                         return;
  44.                     }
  45.                 }
  46.             } catch (ParseException e) {
  47.                 e.printStackTrace();
  48.             }
  49.         }
  50.         public Date getDate() {
  51.             return date;
  52.         }
  53.     }
  54.     public static void main(String[] args) {
  55.         new TestDateFormat().proofOfEvil();
  56.     }
  57. }

on peut meme se manger des NullPointerException [:huit]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°844454
the real m​oins moins
Posté le 07-09-2004 à 19:10:36  profilanswer
 

(le getDate() et tout ça c'est parce qu'au début j'avais pas de boucle dans mon thread, je gardais juste un resultat par thread - et le thread etait donc tres court donc bon ça marchait pas trop.. bref :o )


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°844470
benou
Posté le 07-09-2004 à 19:39:23  profilanswer
 

the real moins moins a écrit :

et tu crois que je controle les threads de jboss moi? :p


j'ai pas dit ca ... mais tu devrais savoir si ton objet est partagé entre plusieurs threads ou non, et l'utiliser en fonction ...
 
j'avais cru comprendre que ce n'était pas le cas avec ce que tu avais dit dans le post au dessus ...


---------------
ma vie, mon oeuvre - HomePlayer
n°844471
benou
Posté le 07-09-2004 à 19:39:53  profilanswer
 


 :heink:  
tu les croyais pas quand il te le disais dans la javadoc ?


---------------
ma vie, mon oeuvre - HomePlayer
n°844476
the real m​oins moins
Posté le 07-09-2004 à 19:59:25  profilanswer
 

benou a écrit :

:heink:  
tu les croyais pas quand il te le disais dans la javadoc ?

bien sur que si mais je voulais voir le genre de problème que ça causait, concretement. (voir premier post du topic [:itm])


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°844479
the real m​oins moins
Posté le 07-09-2004 à 20:00:38  profilanswer
 

benou a écrit :

j'ai pas dit ca ... mais tu devrais savoir si ton objet est partagé entre plusieurs threads ou non, et l'utiliser en fonction ...
 
j'avais cru comprendre que ce n'était pas le cas avec ce que tu avais dit dans le post au dessus ...

dans le post au dessus je parlais probablement de mon machin pour reproduire le probleme. mais c'est vrai que je devrais probablement pouvoir savoir si l'objet sera partagé ou pas. cela dit jprefere me mettre à l'abri d'une config foireuse, par exemple


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°844487
benou
Posté le 07-09-2004 à 20:27:45  profilanswer
 

the real moins moins a écrit :

dans le post au dessus je parlais probablement de mon machin pour reproduire le probleme. mais c'est vrai que je devrais probablement pouvoir savoir si l'objet sera partagé ou pas. cela dit jprefere me mettre à l'abri d'une config foireuse, par exemple


mouais ... moi je préfère que ca se voir quand la config est foireuse ...


---------------
ma vie, mon oeuvre - HomePlayer
n°844496
the real m​oins moins
Posté le 07-09-2004 à 21:16:12  profilanswer
 

j'te dis pas comme ça se voit vachement bien que la config est foireuse quans sans raison apparente t'as une date sur 1000 qui est parsée n'importe comment sans que ça lance la moindre exception [:itm]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°844498
benou
Posté le 07-09-2004 à 21:19:47  profilanswer
 

bien sur, je voulais dire le détecter à un autre endroit ...


Message édité par benou le 07-09-2004 à 21:20:47

---------------
ma vie, mon oeuvre - HomePlayer
n°844499
the real m​oins moins
Posté le 07-09-2004 à 21:21:51  profilanswer
 

detecter koi ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°844501
uriel
blood pt.2
Posté le 07-09-2004 à 21:27:36  profilanswer
 


 
le probleme de config je pense


---------------
IVG en france
n°844503
the real m​oins moins
Posté le 07-09-2004 à 21:28:45  profilanswer
 

ben c'est ce que j'ai cru deviner, mais si c'est ça euh je vais pas aller taper dans la config de jboss depuis mon code quand meme [:itm]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°844582
darklord
You're welcome
Posté le 07-09-2004 à 23:41:14  profilanswer
 

:whistle:  
 
bin merde alors [:joce]


---------------
Just because you feel good does not make you right
n°844588
the real m​oins moins
Posté le 07-09-2004 à 23:43:27  profilanswer
 

[:joce]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°844612
darklord
You're welcome
Posté le 08-09-2004 à 00:05:14  profilanswer
 

suis peut etre un imbécile moi mais le jour où t'arriveras à gérer un Thread correctement on en reparlera :fuck:


---------------
Just because you feel good does not make you right
n°844748
uriel
blood pt.2
Posté le 08-09-2004 à 09:41:15  profilanswer
 

the real moins moins a écrit :

ben c'est ce que j'ai cru deviner, mais si c'est ça euh je vais pas aller taper dans la config de jboss depuis mon code quand meme [:itm]


 
non masi tu peux detecter si elle convient pas. Apres c'est sur que t'es pas plus avance [:joce]


---------------
IVG en france
n°844789
benou
Posté le 08-09-2004 à 10:20:04  profilanswer
 

je voulais juste dire que c'est souvent une mauvaise idée de prévoir des petits bout de sparadra un peu partout "pour le cas" où un objet serait mal utilisé. Mieux vaut prévenir la mauvaise utilisation ...


---------------
ma vie, mon oeuvre - HomePlayer
n°845546
julienv
Posté le 08-09-2004 à 23:32:19  profilanswer
 

Avec un threadlocal tu seras tranquille sans avoir besoin d instancier des  date tout le temps :
 
public class SafeFormat
{
   private static final ThreadLocal local = new ThreadLocal()
   {
      protected synchronized Object initialValue()
      {
         return new SimpleDateFormat();
      }
   };
   public static SimpleDateFormat get()
   {
      return (SimpleDateFormat)local.get();
   }
}
 
Avec ca tu es tranquille, ca va garder un objet SimpleDateFormat par thread et donc tu n auras pas de probleme de concurrence.
 
Pour utiliser c est simple :
 
SimpleDateFormat format = SafeFormat.get();


Message édité par julienv le 08-09-2004 à 23:33:04
n°845644
benou
Posté le 09-09-2004 à 08:28:38  profilanswer
 

:jap:
 
je savais pas à quoi srevait ThreadLocale ... c'est plutot intéressant ... ca ouvre des perspectives ...
je me demande comment c'est géré en interne ...


---------------
ma vie, mon oeuvre - HomePlayer
n°845722
the real m​oins moins
Posté le 09-09-2004 à 10:42:36  profilanswer
 

benou a écrit :

:jap:
 
je savais pas à quoi srevait ThreadLocale ... c'est plutot intéressant ... ca ouvre des perspectives ...
je me demande comment c'est géré en interne ...

haaaaan :o
 
oui c'est interessant, mais dans un contexte j2ee je suis pas sur que ça soit la chose la plus propre à faire :p


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°845749
benou
Posté le 09-09-2004 à 11:15:58  profilanswer
 


il n'y a pas de honte à ne pas savoir, il n'y a que honte à ne pas apprendre :o
 
je savais que ca permettait ce genre de truc, mais je pensais pas que c'était comme ca que ca s'utilisait ... c'est assez spécial...
Faudra que je me lise de la doc là dessus ...


---------------
ma vie, mon oeuvre - HomePlayer
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3
Page Précédente

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

  (Simple)DateFormat et synchronisation

 

Sujets relatifs
Réseau : synchronisation dans un jeuPb dans un programme très simple
Un logiciel d'entraînement dactylographique... c'est pas simple ![PHP] Cherche forum simple compatible MS SQL Server
Manipulation simple table Access - doublons[C] Programme simple...
Optimisation requete simplequestion toute simple d'un nioub en la matiere... =)
[js]modification toute simple:affichage dans une framesynchronisation de tâches
Plus de sujets relatifs à : (Simple)DateFormat et synchronisation


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR