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
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.
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.
Unten ist das Beispiel:
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:
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.
Es gibt mehrere Vorteile. Sie sind:
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!