11
votes

Date du fil de sécurité

Je recherche un remplacement de fil-sécurité pour SimpleDateDeformat . parseObject sur bon vieux fastdateformat n'est pas implémenté et jette une erreur. Des idées? Je n'ai besoin de quelque chose de fantaisie, de la sécurité de la sécurité et de la capacité de gérer ce modèle: "AAAA-MM-DD" .


0 commentaires

5 Réponses :


13
votes

Si possible, utilisez temps Joda . Ses analyseurs de date / heure sont du thread-coffre-fort et c'est généralement un beaucoup plus binger API que date / calendrier . .

Vous peut utiliser utiliser uniquement ses analyseurs, puis convertir les valeurs de retour à date , mais personnellement, je vous recommanderais d'utiliser toute la bibliothèque.


0 commentaires

1
votes

Pourquoi ne pas mettre l'appel de SimpleDateDeformat.parseObject () dans votre propre Synchronisé bloc?


0 commentaires

1
votes

a trouvé un Solution . xxx


1 commentaires

Cela peut ne pas bien performer, mais c'est facile. La performance dépendra du nombre de threads essentielles vraiment d'accéder au formateur en même temps. Je voudrais essayer cela (ou simplement envelopper vos appels à SimpleDateFormat dans un bloc de synchronisation) d'abord voir si c'est vraiment un problème.



8
votes

Comme indiqué dans Cet article Vous pouvez soit Synchronisez, utilisez les habitants du fil ou Joda-Time.

Par exemple, à l'aide de THFLOCALS: P>

public class DateFormatTest {

  private static final ThreadLocal<DateFormat> df
                 = new ThreadLocal<DateFormat>(){
    @Override
    protected DateFormat initialValue() {
        return new SimpleDateFormat("yyyyMMdd");
    }
  };

  public Date convert(String source)
                     throws ParseException{
    Date d = df.get().parse(source);
    return d;
  }
}


2 commentaires

+1 Pas de blocage. Mémoire commerciale pour la sécurité du fil. Aucune grosse bibliothèque externe pour un cas simple.


Votre réponse est une victime de garantie d'une bombe de réputation élevée.



3
votes

java.time

the java.time types sont Safe-Safe . Le java.time API (le API moderne de date-heure * ) existe depuis mars 2014 dans le cadre de la bibliothèque standard Java SE 8.

cité ci-dessous est un avis de la < un href = "https://www.joda.org/joda-time/" rel = "Nofollow NOREFERRER"> Page d'accueil de Joda-Time :

Notez que de Java SE 8 à partir de 8, les utilisateurs sont invités à migrer vers Java.Time (JSR-310) - une partie centrale du JDK qui remplace ce projet.

démo: xxx

sortie: xxx

Démo en ligne

La date moderne -Time API est basé sur ISO 8601 et ne nécessite pas d'utilisation d'un DateTimeformater Objet explicitement tant que la chaîne de date-heure est conforme aux normes ISO 8601. Vous avez peut-être remarqué que je n'ai pas utilisé de type analysant ( DateTimeformatter ) dans le code ci-dessus car aaaa-mm-dd est également le motif ISO 8601 pour une date. < / p>

En savoir plus sur l'API moderne de date-heure de Trail: date de date .


* Pour une raison quelconque, si vous devez vous tenir à Java 6 ou Java 7, vous pouvez utiliser Thraeten-backport qui porte la plupart des Java.time Fonctionnalité à Java 6 & 7. Si vous travaillez pour un projet Android et que votre niveau d'API Android n'est toujours pas conforme à Java-8, vérifiez API Java 8+ Disponible via Desseuking et Comment utiliser Threetenabp dans Android Project .


0 commentaires