« Programmation Java/Processus légers et synchronisation » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 83 :
 
==Synchronisation==
La synchronisation devient nécessaire quand plusieurs thread accède aux mêmes objets.
 
===mot-clé synchronized===
Le mot-clé <code>synchronized</code> permet un accès exclusif à un objet.
 
La syntaxe est la suivante :
''... code non protégé ...''
synchronized(''objet'')
{
''... code protégé ...''
}
''... code non protégé ...''
Le code protégé n'est exécuté que par un seul thread à la fois, tant qu'il n'a pas terminé le bloc d'instruction.
 
Durant l'exécution de ce code protégé par un thread, un autre thread ne peut exécuté celui-ci, mais peut exécuter un autre bloc <code>synchronized</code> si celui-ci n'utilise pas le même objet et qu'il n'est pas déjà en cours d'exécution.
 
Le mot-clé <code>synchronized</code> peut également être utilisé dans la déclaration des méthodes :
public synchronized void codeProtege()
{
''... code protégé ...''
}
est équivalent à :
public void codeProtege()
{
synchronized(this)
{
''... code protégé ...''
}
}
 
Pour une méthode statique (méthode de classe) :
public class MyClass
{
public synchronized static void codeProtege()
{
''... code protégé ...''
}
}
est équivalent à :
public class MyClass
{
public void codeProtege()
{
synchronized(MyClass.class)
{
''... code protégé ...''
}
}
}
 
===Attente et signal===