Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

synchronized le code ou la fonction

6 réponses
Avatar
guillaume07
Quel est la diff=E9rence entre d=E9clarer une m=E9thode synchronized dans
sa signature

- public void synchronized function1()
{
//...code...
}

ou
de d=E9clarer tous son code synchronized

- void function1()
{
synchronized(this)
{=20
//...code=20
}
}=20


merci

6 réponses

Avatar
Rene Mouchot

Quel est la différence entre déclarer une méthode synchronized dans
sa signature

- public void synchronized function1()
{
//...code...
}

ou
de déclarer tous son code synchronized

- void function1()
{
synchronized(this)
{
//...code
}
}


salut,
aucune difference :o)

--
Rene Mouchot

Avatar
ilan.ginzburg
Je me demande s'il n'y aura quand meme pas une difference au niveau
d'un thread dump, on verra mieux dans le deuxième cas ou le thread est
coincé car il aura déjà commencé l'exécution dans la méthode,
non?

Mais fonctionnellement je suis d'accord, pas de différence.
Avatar
Kupee
wrote:
Je me demande s'il n'y aura quand meme pas une difference au niveau
d'un thread dump, on verra mieux dans le deuxième cas ou le thread est
coincé car il aura déjà commencé l'exécution dans la méthode,
non?

Mais fonctionnellement je suis d'accord, pas de différence.


Il doit pourtant y avoir une différence : sur quoi ca synchronise une
méthode static ?
public synchronized static void tata() {
}

En tout cas pas sur this ...

Avatar
Jacques-Olivier Haenni
Bonjour,

Kupee wrote:

Il doit pourtant y avoir une différence : sur quoi ca synchronise une
méthode static ?
public synchronized static void tata() {
}

En tout cas pas sur this ...



Dans ce cas, la synchronisation a lieu sur l'objet de type Class
correspond à la classe en question.

Autrement, pour revenir à la question initiale, le byte code généré est
différent. Si la synchronisation est sur la méthode, alors cela sera
représenté par un flag sur la méthode dans le byte code. Si la
synchronisation est dans la méthode, alors du byte code est généré pour
entrer dans la section critique et pour la quitter à la fin.

Je doute qu'il y ait une différence notable en terme de performance.

Jacques-Olivier

Avatar
guillaume07
merci de toutes ces réponses :o)
Avatar
FM
Une différence avec la méthode synchronisée :

public void aMethod(){
// Non synchronisé
synchronized(this){
// Synchronisé
}
// Non synchronisé
}

Cela permet donc de ne synchroniser que le nécessaire. De plus avec le
bloc on peut synchroniser sur un autre objet que *this*.

Pour les méthodes *static*, le verrou est posé sur "l'instance de la
classe" puisque chaque classe chargée a une instance de java.lang.Class
lui correspondant.

Frank M.