Heim  >  Artikel  >  Java  >  Statische Synchronisierung in Java

Statische Synchronisierung in Java

WBOY
WBOYOriginal
2024-08-30 15:59:04807Durchsuche

Die Ausführung eines Threads wird zur Ausführung eines Threads für jede Instanz, wenn eine Methode der Instanz synchronisiert ist. Wenn es jedoch mehr als eine Instanz derselben Klasse gibt, wird es zu einem Problem, das nur zur Bereitstellung eine Synchronisierung auf Klassenebene erfordert Eine Sperre für alle Instanzen der Klasse als eine Synchronisierung auf Objektebene. Dies wird in Java als statische Synchronisierung bezeichnet, die auf zwei Arten durchgeführt werden kann: zum einen durch eine statische synchronisierte Methode und zum anderen durch einen synchronisierten Block von Code innerhalb der statischen Methode.

Starten Sie Ihren kostenlosen Softwareentwicklungskurs

Webentwicklung, Programmiersprachen, Softwaretests und andere

Syntax

Die Syntax lautet wie folgt:

synchronized static return_type class_name{}

wobei Rückgabetyp der Typ des von der Klasse zurückgegebenen Werts ist und Klassenname der Name der Klasse ist.

Wie funktioniert die statische Synchronisierung in Java?

Jede Instanz der Klasse hat eine Sperre für das Objekt der Klasse in Java. Wenn eine statische Methode synchronisiert wird, gilt die Sperre nicht für das Objekt der Klasse, sondern für die Klasse selbst. Nehmen wir an, es gibt zwei Objekte einer Klasse namens obj1 und obj2 und die Threads t1 und t2 bearbeiten das Objekt obj1. Ebenso arbeiten die Threads t3 und t4 am Objekt obj2. Wenn der Codeblock oder die Methode synchronisiert wird, kann es zu keiner Interferenz zwischen den Threads t1 und t2 kommen, da beide Threads t1 und t2 auf dasselbe Objekt obj1 verweisen, das über eine einzelne Sperre verfügt. Ebenso kann es keine Interferenz zwischen den Threads t3 und t4 geben, da beide Threads t3 und t4 auf dasselbe Objekt obj2 verweisen, das eine einzige Sperre hat.

Aber zwischen den Threads t1 und t3 kann es zu Störungen kommen, da beide Threads t1 und t3 unterschiedliche Objekte mit unterschiedlichen Sperren erhalten haben. Ebenso kann es zu Interferenzen zwischen den Threads t2 und t4 kommen, da beide Threads t2 und t4 unterschiedliche Objekte mit unterschiedlichen Sperren erhalten haben. Wir möchten keinerlei Interferenzen zwischen den Threads haben und dieses Problem kann durch die Verwendung der statischen Synchronisierung in Java gelöst werden. Ein Klassenobjekt wird von der Java Virtual Machine erstellt, wenn die Klasse zum ersten Mal geladen wird. Dieselbe Klasse wird nicht erneut geladen, nachdem die Klasse zum ersten Mal geladen wurde. Für jede geladene Klasse wird von der Java Virtual Machine eine Instanz der Klasse erstellt. Diese Instanzen der Klasse werden Objekte genannt und die Objektsynchronisierung kann mithilfe der statischen Synchronisierung in Java erfolgen.

Beispiel zur Implementierung der statischen Synchronisierung in Java

Unten ist das Beispiel:

Beispiel #1

Programm zur Demonstration der statischen Synchronisierung in Java:

Code:

//a class called check is defined
class check
{
// a method called Line is define and only one thread will be able to access this method at once because it is synchronized
synchronized public void Line()
{
//a for loop is defined to loop from values 0 to 3
for (int r = 1; r <5; r++)
{
System.out.println(r);
try
{
Thread.sleep(390);
}
catch (Exception ex)
{
System.out.println(ex);
}
}
}
}
//a class called Trap is defend which extends a thread of the class
class Trap extends Thread
{
//a variable of the class check is defined
check line1;
//a constructor of the class trap is defined with check class variable
Trap(check line1)
{
this.line1 = line1;
}
//the standard run method is overridden
public void run()
{
line1.Line();
}
}
//a class called program is defined
public class program
{
//main method is called
public static void main(String[] args)
{
//an instance of the class check is defined
check object = new check();
// two threads of the class trap is created and they share the same object
Trap tra1 = new Trap(object);
Trap tra2 = new Trap(object);
//Beginning the execution of two threads
tra1.start();
tra2.start();
}
}

Ausgabe:

Statische Synchronisierung in Java

Erklärung: Im obigen Programm ist eine Klasse namens check definiert. Dann wird eine Methode namens Line definiert und nur ein Thread kann gleichzeitig auf diese Methode zugreifen, da sie synchronisiert ist. Dann wird eine for-Schleife definiert, um die Werte 0 bis 3 zu durchlaufen. Dann wird eine Klasse namens Trap verteidigt, die einen Thread der Klasse erweitert. Anschließend wird eine Variable der Klassenprüfung definiert. Ein Konstruktor der Klasse Trap wird mit der Prüfklassenvariablen als Parameter definiert. Dann wird die Standardausführungsmethode überschrieben. Dann wird eine Klasse namens Programm definiert. Dann wird die Hauptmethode aufgerufen. Anschließend wird eine Instanz der Klassenprüfung definiert. Dann werden zwei Threads der Klasse trap, tra1 und tra2, erstellt und sie teilen sich dasselbe Objekt. Dann beginnt die Ausführung der beiden Threads tra1 und tra2 so, dass die Ausführung eines Threads die Ausführung eines anderen Threads nicht unterbricht oder die Ausführung eines Threads die Ausführung des anderen Threads nicht sperrt. Die Ausgabe des Programms ist wie in den Schnappschüssen oben dargestellt.

Vorteile der statischen Synchronisierung in Java

Es gibt mehrere Vorteile. Sie sind:

  • Die Probleme der Dateninkonsistenz können mithilfe der statischen Synchronisierung in Java gelöst werden.
  • Durch die Verwendung der statischen Synchronisierung in Java kann zu einem bestimmten Zeitpunkt nur ein Thread auf ein Objekt zugreifen. Das Objekt, auf das nur ein Thread zugreifen soll, muss mit dem Schlüsselwort synchronisiert deklariert werden.
  • Die Parallelität verschiedener Threads und verschiedener Prozesse kann mithilfe der statischen Synchronisierung in Java verwaltet werden. Das bedeutet, dass zwei oder mehr Threads oder zwei oder mehr Prozesse gleichzeitig ausgeführt werden können, um sicherzustellen, dass ein Thread die Ausführung anderer Threads nicht blockiert oder unterbricht.

Fazit

In diesem Tutorial verstehen wir das Konzept der statischen Synchronisierung in Java anhand der Definition, der Syntax zum Deklarieren der statischen Synchronisierung in Java, der Funktionsweise der statischen Synchronisierung in Java anhand von Beispielen und deren Ausgaben sowie den Vorteilen der statischen Synchronisierung in Java.

Das obige ist der detaillierte Inhalt vonStatische Synchronisierung in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Synchronisierter Block in JavaNächster Artikel:Synchronisierter Block in Java