Faut-il éviter Synchronized(this) en Java ?
Certains développeurs préconisent de ne pas utiliser synchronisé(this), affirmant qu'un verrou sur un une référence privée est préférable. Les raisons citées incluent le vol potentiel de serrures, un débit réduit et une exposition excessive d'informations.
Vol de serrures
Bien que le vol de serrures soit un problème potentiel, il est plus susceptible de se produire involontairement en raison à un accès accidentel à la serrure. Lorsque synchronisé(this) est utilisé, le verrou devient une partie de l'interface exposée de la classe et doit être documenté en conséquence. Dans certains scénarios, un autre code peut accéder intentionnellement au verrou, par exemple lors de l'utilisation de Collections.synchronizedMap.
Débit réduit
L'affirmation selon laquelle synchronisé(ce) réduit le débit est trop simpliste. L'élimination de synchronisé(ce) à elle seule n'améliorera pas les performances. Une synchronisation appropriée nécessite une conception minutieuse pour optimiser le débit.
Exposition excessive d'informations
Synchronisé(ce) partage le verrou entre toutes les méthodes synchronisées au sein d'une classe. Si un verrouillage précis est requis, alors synchronisé (this) n'est pas applicable et doit être remplacé par un verrou privé.
Quand utiliser Synchronized(this)
Malgré les inquiétudes soulevées, synchronisé(this) reste un idiome de synchronisation valable avec plusieurs avantages :
Conclusion
Le choix entre une serrure synchronisée(ce) et une serrure privée dépend des exigences spécifiques de l'application. Bien que la synchronisation (cela) ne doive pas être complètement évitée, les développeurs doivent soigneusement examiner ses implications et utiliser un verrou privé si nécessaire, par exemple lorsque la granularité ou la dissimulation d'informations sont une priorité.
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!