L'exécution du thread devient l'exécution d'un thread pour chaque instance si une méthode de l'instance est synchronisée mais lorsqu'il y a plus d'une instance de la même classe, cela devient un problème qui nécessite une synchronisation au niveau de la classe pour fournir uniquement un verrou pour toutes les instances de la classe plutôt que d'avoir une synchronisation au niveau de l'objet et cela s'appelle une synchronisation statique en Java qui peut être effectuée de deux manières, l'une consiste à avoir une méthode synchronisée statique et l'autre à avoir un bloc synchronisé de code dans la méthode statique.
Commencez votre cours de développement de logiciels libres
Développement Web, langages de programmation, tests de logiciels et autres
La syntaxe est la suivante :
synchronized static return_type class_name{}
où return type est le type de la valeur renvoyée par la classe et class_name est le nom de la classe.
Chaque instance de la classe possède un verrou sur l'objet de la classe en Java. Si une méthode statique est synchronisée, alors le verrou n'est pas sur l'objet de la classe, mais sur la classe elle-même. Disons qu'il existe deux objets d'une classe appelée obj1 et obj2 et que les threads t1 et t2 opèrent sur l'objet obj1. De même, les threads t3 et t4 opèrent sur l'objet obj2. Si le bloc de code ou la méthode est synchronisé, aucune interférence ne peut y avoir entre les threads t1 et t2 car les threads t1 et t2 font référence au même objet obj1 qui a un seul verrou. De même, aucune interférence ne peut y avoir entre les threads t3 et t4 car les threads t3 et t4 font référence au même objet obj2 qui a un seul verrou.
Mais des interférences peuvent exister entre les threads t1 et t3 car les threads t1 et t3 ont obtenu des objets différents avec des verrous différents. De même, des interférences peuvent exister entre les threads t2 et t4 car les threads t2 et t4 ont obtenu des objets différents avec des verrous différents. Nous ne voulons aucune sorte d'interférence entre les threads et ce problème peut être résolu en utilisant la synchronisation statique en Java. Un objet de classe est créé par la machine virtuelle Java lorsque le chargement de la classe a lieu pour la première fois. La même classe ne sera pas chargée à nouveau après le premier chargement de la classe. Une instance de la classe est créée pour chaque classe chargée par la machine virtuelle Java. Ces instances de la classe sont appelées objets et la synchronisation des objets peut être effectuée à l'aide de la synchronisation statique en Java.
Ci-dessous l'exemple :
Programme pour démontrer la synchronisation statique en 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(); } }
Sortie :
Explication : Dans le programme ci-dessus, une classe appelée check est définie. Ensuite une méthode appelée Line est définie et un seul thread pourra accéder à cette méthode à la fois car elle est synchronisée. Ensuite, une boucle for est définie pour boucler des valeurs 0 à 3. Ensuite, une classe appelée Trap est défendue qui étend un thread de la classe. Ensuite, une variable de contrôle de classe est définie. un constructeur du piège de classe est défini avec la variable de classe de contrôle comme paramètre. Ensuite, la méthode d’exécution standard est remplacée. Ensuite, une classe appelée programme est définie. Ensuite, la méthode principale est appelée. Ensuite, une instance de la vérification de classe est définie. Ensuite, deux threads de la classe trap, tra1 et tra2 sont créés et partagent le même objet. Ensuite, l'exécution des deux threads tra1 et tra2 commence de telle manière que l'exécution d'un thread n'interrompt pas l'exécution de l'autre thread ou que l'exécution d'un thread ne verrouille pas l'exécution de l'autre thread. Le résultat du programme est tel qu'indiqué dans les instantanés ci-dessus.
Il y a plusieurs avantages. Ce sont :
Dans ce tutoriel, nous comprenons le concept de synchronisation statique en Java à travers la définition, la syntaxe pour déclarer la synchronisation statique en Java, le fonctionnement de la synchronisation statique en Java à travers des exemples et leurs résultats et les avantages de la synchronisation statique en Java.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!