Java Servlet sollte die Multithread-Umgebung kennen

Lesen Sie zuerst den folgenden Spring MVC-Controller

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

}

Dieser Controller merkt sich, wie oft auf ihn zugegriffen wurde, und gibt aus, wie oft auf ihn zugegriffen wurde. Wenn Sie 100.000 Mal ** einmal ** auf den Controller zugreifen, können 100.000 korrekt ausgegeben werden.

Aber der Controller ist furchtbar problematisch. Wenn ** 100 Benutzer gleichzeitig auf 1000 zugreifen **, ist die letzte Ausgabe nicht 100.000.

Java Servlet ist eine Multithread-Umgebung, dh eine Umgebung, die eine große Anzahl von Anforderungen gleichzeitig verarbeiten kann. Spring MVC basiert auf Java Servlet. Das Design der Java-Servlet-Klasse muss Multithread-bewusst sein.

Einfach ausgedrückt besteht das Problem darin, dass die Klassenvariable * count * nicht threadsicher ist. Das Problem kann gelöst werden, indem der Controller wie unten gezeigt neu geschrieben wird.

@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

Java Servlet sollte die Multithread-Umgebung kennen
5 Dinge, die neue Programmierer beachten sollten
Dinge, die Sie beim Schreiben von Java beachten sollten
[Java] Kurzschlüsse beachten (Kurzschlussauswertung)
[Java] Dinge, die Sie bei der Ausgabe von FizzBuzz beachten sollten
[Java] Anfängerverständnis von Servlet-②
[Java Silver] Hinweise zu switch-Anweisungen
Dinge, die Sie beim Schreiben von Code in Java beachten sollten
Um auf einfach zu lesenden Code zu achten
[Processing x Java] Erstellen einer Entwicklungsumgebung
[Anfänger] Punkte, auf die Sie nach Java-Übungen / Vererbung / abstrakte Methode achten sollten [Anmerkung 26]
Fassen Sie den Lebenszyklus von Java-Objekten zusammen, die bei der Android-Entwicklung berücksichtigt werden müssen
Zusammenfassung der Java-Umgebungseinstellungen für mich [mac]
[Java] Achten Sie auf den Schlüsseltyp der Karte
[Java] Servlet-Filter
[Java] Umgebungskonstruktion
Java-Entwicklungsumgebung
[Java] Übersicht über Java
Grundregeln zum Schreiben von einfach zu lesendem Code
Die Java 8 Stream-Verarbeitung kann bisher weggelassen werden!
[Schienen] Beachten Sie bei der Verwendung von Ajax die "CSRF-Maßnahmen".
[Java] Holen Sie sich die Datei unabhängig von der Umgebung in das JAR
[Java] Wann var verwendet werden soll und wann nicht
Achten Sie auf die Speicherbereinigung und vermeiden Sie Speicherlecks
[Java10] Achten Sie darauf, var und generics nicht zusammen zu verwenden