Le servlet Java doit être conscient de l'environnement multithread

Lisez d'abord le contrôleur Spring MVC ci-dessous

@Controller
@RequestMapping("/count")
public class CountController {

	private long count = 0;

	@GetMapping(value = "/increment", produces = "text/plain")
	@ResponseBody
	public String increment() {
		count++;
		return Long.toString(count);
	}

}

Ce contrôleur se souvient du nombre de fois où il est accédé et affiche le nombre de fois où il est accédé. Si vous accédez au contrôleur 100 000 fois ** une fois **, 100 000 peuvent être correctement émis.

Mais le contrôleur est terriblement problématique. Si ** 100 utilisateurs accèdent en même temps **, 1 000 fois, le dernier résultat n'est pas 100 000.

Java Servlet est un environnement multi-thread, c'est-à-dire un environnement capable de traiter un grand nombre de requêtes en même temps. Spring MVC est construit sur Java Servlet. La conception de la classe Java Servlet doit être compatible avec le multithread.

En termes simples, le problème est que la variable de classe * count * n'est pas thread-safe. Le problème peut être résolu en réécrivant le contrôleur comme indiqué ci-dessous.

@Controller
@RequestMapping("/count")
public class CountController {

	private AtomicLong count = new AtomicLong(0l);

	@GetMapping(value = "/increment", produces = "text/plain")
	@ResponseBody
	public String increment() {
		return Long.toString(count.addAndGet(1l));
	}

}

Recommended Posts

Le servlet Java doit être conscient de l'environnement multithread
5 choses dont les nouveaux programmeurs devraient être conscients
Points à prendre en compte lors de l'écriture de Java
[Java] Attention aux courts-circuits (évaluation des courts-circuits)
[Java] Éléments à prendre en compte lors de la sortie de FizzBuzz
[Java] Compréhension débutante de Servlet-②
[Java Silver] Ce qu'il faut savoir concernant les instructions switch
Éléments à prendre en compte lors de l'écriture de code en Java
Être conscient du code facile à lire
[Traitement x Java] Création d'un environnement de développement
[Débutant] Points à surveiller après les exercices Java / Héritage / Méthode abstraite [Note 26]
Résumer le cycle de vie des objets Java à prendre en compte dans le développement Android
Récapitulatif des paramètres de l'environnement Java pour moi-même [mac]
[Java] Faites attention au type de clé de la carte
[Java] Filtre de servlet
[Java] Construction de l'environnement
Environnement de développement Java
[Java] Présentation de Java
Règles de base à connaître pour écrire du code facile à lire
Le traitement Java 8 Stream peut être omis jusqu'à présent!
[Rails] Lorsque vous utilisez ajax, faites attention aux "mesures CSRF".
[Java] Récupère le fichier dans le fichier jar quel que soit l'environnement
[Java] Quand var doit être utilisé et quand il ne doit pas être utilisé
Soyez conscient du garbage collection et évitez les fuites de mémoire
[Java10] Veillez à utiliser ensemble var et génériques