


Ein Beispiel, um zu verstehen, wie das synchronisierte Schlüsselwort in Java verwendet wird
Dieser Artikel vermittelt Ihnen relevantes Wissen über Java und stellt hauptsächlich verwandte Themen zum synchronisierten Schlüsselwort vor, einschließlich der Verwendung von Synchronisationsmethoden, der Verwendung von Synchronisationsanweisungen oder -blöcken, was Synchronisation ist und warum Synchronisation erforderlich ist Schauen Sie sich den Inhalt unten an. Ich hoffe, er wird für alle hilfreich sein.
Empfohlene Studie: „Java-Video-Tutorial“
In der täglichen Entwicklung stößt man häufig auf das synchronisierte Schlüsselwort. Wissen Sie, wie man synchronisiert verwendet? Dieser Artikel wird es Ihnen vorstellen.
Wir haben zwei Möglichkeiten, die Synchronisierung zu verwenden:
- Synchronisierte Methoden verwenden
- Synchronisierte Anweisungen oder Blöcke verwenden
Synchronisierte Methoden verwenden
Um eine Methode zu synchronisieren, fügen Sie einfach das synchronisierte Schlüsselwort zu ihrer Deklaration hinzu:
public class SynchronizedDemo { private int i = 0; public synchronized void add() { i++; } public synchronized void del() { i--; } public synchronized int getValue() { return i; } }
Wie im obigen Code gezeigt, gibt es drei Synchronisationsmethoden:
- add()
- del()
- getValue()
Jede Methode wird nur einmal gleichzeitig für dasselbe Objekt aufgerufen. Wenn beispielsweise ein Thread add () aufruft, werden andere Threads blockiert, bis der erste Thread die Verarbeitung der Methode add () abgeschlossen hat.
Verwenden Sie synchronisierte Anweisungen oder Blöcke
public void del(int value){ synchronized(this){ this.i -= value; } }
Im obigen Code wird synchronisiert vor einem {}-Code hinzugefügt, der einen synchronisierten Codeblock darstellt.
Die oben genannten zwei Möglichkeiten, das synchronisierte Schlüsselwort zu verwenden, stellen wir kurz die Konzepte im Zusammenhang mit der Synchronisierung vor.
Was ist Synchronisation?
Synchronisierung ist ein Prozess, der den Zugriff mehrerer Threads auf eine gemeinsame Ressource steuert und so inkonsistente Ergebnisse vermeidet. Der Hauptzweck der Verwendung der Synchronisierung besteht darin, inkonsistentes Verhalten von Threads zu vermeiden und Thread-Interferenzen zu verhindern.
Sie können das synchronisierte Schlüsselwort in Java verwenden, um Synchronisierungseffekte zu erzielen, die nur auf Methoden und Blöcke angewendet werden können, nicht auf Variablen und Klassen.
Warum müssen wir synchronisieren?
Schauen wir uns zunächst einen Code an:
public class SynchronizedDemo { int i; public void increment() { i++; } public static void main(String[] args) { SynchronizedDemo synchronizedDemo = new SynchronizedDemo(); synchronizedDemo.increment(); System.out.println("计算值为:" + synchronizedDemo.i); } }
Jedes Mal, wenn die increment()-Methode aufgerufen wird, wird der berechnete Wert um 1 erhöht:
Bei 2-maligem Aufruf werden 2 hinzugefügt, wenn sie aufgerufen wird 3 Mal werden 3 hinzugefügt, und wenn es 4 Mal aufgerufen wird, werden 3 hinzugefügt:
public class SynchronizedDemo { int i; public void increment() { i++; } public static void main(String[] args) { SynchronizedDemo synchronizedDemo = new SynchronizedDemo(); synchronizedDemo.increment(); synchronizedDemo.increment(); synchronizedDemo.increment(); synchronizedDemo.increment(); System.out.println("计算值为:" + synchronizedDemo.i); } }
Das Ergebnis der Berechnung zu diesem Zeitpunkt ist wie erwartet, das Ergebnis ist 10.
Dies ist eine Single-Threaded-Situation, alles ist so gut, aber ist das wirklich so? Wie würde es aussehen, wenn es eine Multithread-Umgebung wäre?
Lassen Sie uns unten die Multithreading-Situation demonstrieren!
public class SynchronizedDemo { int i; public void increment() { i++; } public static void main(String[] args) { SynchronizedDemo synchronizedDemo = new SynchronizedDemo(); Thread thread = new Thread(() -> { for (int i = 1; i <= 10; i++) { synchronizedDemo.increment(); } }); thread.start(); try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("计算值为:" + synchronizedDemo.i); } }
2000
sein, da sich der Wert ändert, nachdem Thread1 Inkrement aufruft () 1000 Mal wird 1000. Nachdem Thread2 1000 Mal Inkrement () aufruft, wird der Wert 2000. Lassen Sie es uns ausführen und das Ergebnis sehen:Das Ergebnis ist anders als wir dachten. Es ist weniger als 2000. Führen wir es noch einmal aus:
Das Ergebnis ist immer noch kleiner als 2000.
Warum ist das so?
public class SynchronizedDemo { int i; public void increment() { i++; } public static void main(String[] args) { SynchronizedDemo synchronizedDemo = new SynchronizedDemo(); Thread thread1 = new Thread(() -> { for (int i = 1; i <= 1000; i++) { synchronizedDemo.increment(); } }); Thread thread2 = new Thread(() -> { for (int i = 1; i <= 1000; i++) { synchronizedDemo.increment(); } }); thread1.start(); thread2.start(); try { thread1.join(); thread2.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("计算值为:" + synchronizedDemo.i); } }
Sie können sehen, dass der Wert 2000 ist.
Wir erhöhen die Anzahl der Berechnungen auf 10.000 mal:
public class SynchronizedDemo { int i; public synchronized void increment() { i++; } public static void main(String[] args) { SynchronizedDemo synchronizedDemo = new SynchronizedDemo(); Thread thread1 = new Thread(() -> { for (int i = 1; i <= 1000; i++) { synchronizedDemo.increment(); } }); Thread thread2 = new Thread(() -> { for (int i = 1; i <= 1000; i++) { synchronizedDemo.increment(); } }); thread1.start(); thread2.start(); try { thread1.join(); thread2.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("计算值为:" + synchronizedDemo.i); } }
Es ist ersichtlich, dass ein wenig Synchronisierung dieses Problem so einfach löst.
Das Prinzip dahinter besteht darin, dass Thread 1 die Methode automatisch sperrt, wenn sie synchronisiert ist. Zu diesem Zeitpunkt besitzt nur Thread 1 die Sperre und andere Threads können nur warten, bis Thread 1 die Methode freigibt Erst nach dem Sperren der Sperre kann Thread 2 am Aufruf teilnehmen.
Wenn Thread 2 inkrementiert (), erhält Thread 1 die Sperre und Thread 1 wartet, bis Thread 2 die Sperre aufhebt. Auf diese Weise treten während dieses Vorgangs keine Berechnungsfehler auf.
Zusammenfassung
- Das synchronisierte Schlüsselwort ist die einzige Möglichkeit, einen Block oder eine Methode zu synchronisieren.
- Das synchronisierte Schlüsselwort bietet Sperrfunktionen, die sicherstellen, dass keine Race Conditions zwischen Threads auftreten. Nach dem Sperren kann der Thread nur Daten aus dem Hauptspeicher lesen. Nach dem Lesen der Daten wird der Schreibvorgang gelöscht, bevor die Sperre aufgehoben werden kann. Das Schlüsselwort
- synchronized trägt auch dazu bei, eine Neuordnung von Programmanweisungen zu vermeiden.
Empfohlenes Lernen: „Java-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonEin Beispiel, um zu verstehen, wie das synchronisierte Schlüsselwort in Java verwendet wird. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

PHP ist eine Skriptsprache, die auf der Serverseite weit verbreitet ist und insbesondere für die Webentwicklung geeignet ist. 1.PHP kann HTML einbetten, HTTP -Anforderungen und Antworten verarbeiten und eine Vielzahl von Datenbanken unterstützt. 2.PHP wird verwendet, um dynamische Webinhalte, Prozessformdaten, Zugriffsdatenbanken usw. mit starker Community -Unterstützung und Open -Source -Ressourcen zu generieren. 3. PHP ist eine interpretierte Sprache, und der Ausführungsprozess umfasst lexikalische Analyse, grammatikalische Analyse, Zusammenstellung und Ausführung. 4.PHP kann mit MySQL für erweiterte Anwendungen wie Benutzerregistrierungssysteme kombiniert werden. 5. Beim Debuggen von PHP können Sie Funktionen wie error_reporting () und var_dump () verwenden. 6. Optimieren Sie den PHP-Code, um Caching-Mechanismen zu verwenden, Datenbankabfragen zu optimieren und integrierte Funktionen zu verwenden. 7

PHP und Python haben jeweils ihre eigenen Vorteile, und die Wahl sollte auf Projektanforderungen beruhen. 1.PHP eignet sich für die Webentwicklung mit einfacher Syntax und hoher Ausführungseffizienz. 2. Python eignet sich für Datenwissenschaft und maschinelles Lernen mit präziser Syntax und reichhaltigen Bibliotheken.

PHP eignet sich für die Webentwicklung, insbesondere für die schnelle Entwicklung und Verarbeitung dynamischer Inhalte, ist jedoch nicht gut in Anwendungen auf Datenwissenschaft und Unternehmensebene. Im Vergleich zu Python hat PHP mehr Vorteile in der Webentwicklung, ist aber nicht so gut wie Python im Bereich der Datenwissenschaft. Im Vergleich zu Java wird PHP in Anwendungen auf Unternehmensebene schlechter, ist jedoch flexibler in der Webentwicklung. Im Vergleich zu JavaScript ist PHP in der Back-End-Entwicklung präziser, ist jedoch in der Front-End-Entwicklung nicht so gut wie JavaScript.

PHP und Python haben jeweils ihre eigenen Vorteile und eignen sich für verschiedene Szenarien. 1.PHP ist für die Webentwicklung geeignet und bietet integrierte Webserver und reichhaltige Funktionsbibliotheken. 2. Python eignet sich für Datenwissenschaft und maschinelles Lernen mit prägnanter Syntax und einer leistungsstarken Standardbibliothek. Bei der Auswahl sollte anhand der Projektanforderungen festgelegt werden.

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

PhPhas significantantyPactedWebDevelopmentAndendendsbeyondit.1) iTpowersMAjorPlatforms-LikewordpressandExcelsInDatabaseInteractions.2) php'SadaptabilityAllowStoscaleForLargeApplicationsfraMe-Linien-Linien-Linien-Linienkripte

Die Gründe, warum PHP für viele Websites der bevorzugte Technologie -Stack ist, umfassen die Benutzerfreundlichkeit, die starke Unterstützung der Community und die weit verbreitete Verwendung. 1) Einfach zu erlernen und zu bedienen, geeignet für Anfänger. 2) eine riesige Entwicklergemeinschaft und eine reichhaltige Ressourcen haben. 3) in WordPress, Drupal und anderen Plattformen häufig verwendet. 4) Integrieren Sie eng in Webserver, um die Entwicklung der Entwicklung zu vereinfachen.
