Maison  >  Article  >  Java  >  Synchronisation statique en Java

Synchronisation statique en Java

WBOY
WBOYoriginal
2024-08-30 15:59:04779parcourir

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

Syntaxe

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.

Comment fonctionne la synchronisation statique en Java ?

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.

Exemple d'implémentation de la synchronisation statique en Java

Ci-dessous l'exemple :

Exemple n°1

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 :

Synchronisation statique en Java

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.

Avantages de la synchronisation statique en Java

Il y a plusieurs avantages. Ce sont :

  • Les problèmes d'incohérence des données peuvent être résolus à l'aide de la synchronisation statique en Java.
  • En utilisant la synchronisation statique en Java, un objet n'est accessible que par un seul thread à un moment donné. L'objet auquel un seul thread doit accéder doit être déclaré avec le mot-clé synchronisé.
  • La simultanéité de différents threads et de différents processus peut être gérée en utilisant la synchronisation statique en Java. C'est-à-dire deux threads ou plus, ou deux processus ou plus peuvent être exécutés simultanément en même temps en s'assurant qu'un thread ne verrouille pas ou n'interrompt pas l'exécution des autres threads.

Conclusion

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Bloc synchronisé en JavaArticle suivant:Bloc synchronisé en Java