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.
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.
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.
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 ...
ilan.ginzburg@gmail.com 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() {
}
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 ...
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
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.
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.
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.
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.
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.