Dans l'application client de test, il est devenu nécessaire d'envoyer non seulement le contenu du fichier de définition dans l'ordre, mais également plusieurs en même temps. Lorsque j'ai mis les classes d'implémentation Runnable
pour le traitement dans des threads séparés dans une liste et les ai implémentées dans un thread séparé, j'ai remarqué que si elles étaient exécutées dans l'ordre, elles seraient exécutées dans l'ordre.
1.Tout d'abord 2. Table des matières 3. Maintenant 4. Conclusion
J'ai uniquement utilisé Runnable
comme point de départ pour le traitement à exécuter dans un autre thread, mais j'ai remarqué que si j'appelle simplement la méthode run ()
, le traitement sera effectué dans le même thread. ..
Runner.java
public void start() {
List<Runnable> runnables = new ArrayList<>();
for (String line : getLines()) {
runnables.add(createRunnable(line));
}
log.debug("Même exécution séquentielle de thread");
runnables.forEach(r -> r.run());
log.debug("Exécution simultanée de plusieurs threads");
runnables.forEach(r -> new Thread(r).start());
}
private String[] getLines() {
return new String[] {
"Hello",
"Hi",
"How are you",
"Bye"
};
}
private Runnable createRunnable(String line) {
//Le traitement à exécuter diffère selon le contenu de la ligne
if (line.length() < 5) {
return () -> process(line, "***");
}
else {
return () -> process(line);
}
}
private void process(String line) {
log.debug(Thread.currentThread().getId() + ": "+ line);
}
private void process(String line, String deco) {
process(deco + line + deco);
}
Récemment, j'ai finalement commencé à toucher Java 8 et j'étudie. J'ai développé avec Java 6 pour la commodité des projets dans lesquels j'ai été impliqué. Nous devons changer notre façon de penser la conception des classes.