[JAVA] J'ai réalisé que Runnable n'était pas seulement une interface pour s'exécuter dans un thread séparé

introduction

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.

table des matières

1.Tout d'abord 2. Table des matières 3. Maintenant 4. Conclusion

Alors que maintenant

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);
	}

en conclusion

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.

Recommended Posts

J'ai réalisé que Runnable n'était pas seulement une interface pour s'exécuter dans un thread séparé
Une histoire que j'ai réalisé que je devais étudier en premier lieu en tant qu'ingénieur
J'ai essayé d'utiliser l'instruction Extended for en Java