Bonjour. C'est Kecho. ** Utilisez-vous SimpleDateFormat et diffusez-vous? ** ** C'est une niche. J'adore stream. Cette fois, nous vérifierons que SimpleDateFormat est thread unsafe.
Tout d'abord, préparez un objet de type Date.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
Calendar day1 = Calendar.getInstance();
day1.set(2020, 0, 31, 0, 0, 0);
Calendar day2 = Calendar.getInstance();
day2.set(1995, 3, 6, 0, 0, 0);
Mettons-le dans la liste.
for (int i = 0; i < 10; i++) {
//Pack 20 objets Date dans la liste
list.add(day1.getTime());
list.add(day2.getTime());
}
Tout d'abord, procédez sans exécuter en parallèle.
list.stream().map(date -> sdf.format(date)).forEach(System.out::println);
//Convertissez chaque élément en chaîne à son tour et en sortie
L'image entière est ci-dessous.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
Calendar day1 = Calendar.getInstance();
day1.set(2020, 0, 31, 0, 0, 0);
Calendar day2 = Calendar.getInstance();
day2.set(1995, 3, 6, 0, 0, 0);
List<Date> list = new ArrayList<>(); //Créer une liste
for (int i = 0; i < 10; i++) {
//Remplissez la liste avec des objets Date
list.add(day1.getTime());
list.add(day2.getTime());
}
list.stream().map(date -> sdf.format(date)).forEach(System.out::println);
2020/01/31 12:00:00
1995/04/06 12:00:00
2020/01/31 12:00:00
1995/04/06 12:00:00
2020/01/31 12:00:00
1995/04/06 12:00:00
2020/01/31 12:00:00
1995/04/06 12:00:00
2020/01/31 12:00:00
1995/04/06 12:00:00
2020/01/31 12:00:00
1995/04/06 12:00:00
2020/01/31 12:00:00
1995/04/06 12:00:00
2020/01/31 12:00:00
1995/04/06 12:00:00
2020/01/31 12:00:00
1995/04/06 12:00:00
2020/01/31 12:00:00
1995/04/06 12:00:00
Il ne semble y avoir aucun problème.
stream traitera en parallèle simplement en ajoutant parallel () à l'opération intermédiaire.
list.stream().map(date -> sdf.format(date)).forEach(System.out::println);
Faisons le!
2020/01/31 12:00:00
1995/01/31 12:00:00 //Qu'est-ce que c'est ça
1995/04/06 12:00:00
2020/01/31 12:00:00
2020/01/31 12:00:00
2020/01/31 12:00:00
2020/01/31 12:00:00
1995/04/06 12:00:00
1995/04/06 12:00:00
2020/01/31 12:00:00
1995/04/06 12:00:00
2020/01/31 12:00:00
1995/04/06 12:00:00
2020/01/31 12:00:00
1995/04/06 12:00:00
1995/04/06 12:00:00
2020/01/31 12:00:00
1995/04/06 12:00:00
2020/01/31 12:00:00
1995/04/31 12:00:00 //Qu'est-ce que c'est ça
Certaines dates inattendues ont été sorties. J'ai pu confirmer qu'il s'agit d'un thread non sécurisé.
Vous pouvez créer un objet SimpleDateFormat dans chaque thread. Fondamentalement, il est préférable d'utiliser l'API Date et heure implémentée à partir de Java 8.
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd hh:mm:ss");
LocalDateTime today = LocalDateTime.now();
LocalDateTime birthDay = LocalDateTime.of(1995, 4, 6, 12, 0, 0);
List<LocalDateTime> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
//Remplissez la liste avec des objets Date
list.add(today);
list.add(birthDay);
}
list.stream().parallel().map(date -> dtf.format(date)).forEach(System.out::println);
2020/01/31 09:33:20
1995/04/06 12:00:00
1995/04/06 12:00:00
2020/01/31 09:33:20
1995/04/06 12:00:00
2020/01/31 09:33:20
2020/01/31 09:33:20
2020/01/31 09:33:20
2020/01/31 09:33:20
2020/01/31 09:33:20
2020/01/31 09:33:20
1995/04/06 12:00:00
1995/04/06 12:00:00
1995/04/06 12:00:00
1995/04/06 12:00:00
1995/04/06 12:00:00
2020/01/31 09:33:20
2020/01/31 09:33:20
1995/04/06 12:00:00
1995/04/06 12:00:00
Ça me va.
Utiliser l'API de date et d'heure pour Java 8 et supérieur
Recommended Posts