Éviter synchronisé(ce) en Java ?
La question de savoir s'il faut éviter synchronisé(ce) en Java a été débattue au sein de Java communauté, les partisans préconisant plutôt des références à des verrous privés. Cet article vise à fournir des exemples concrets où il est préférable d'éviter synchronisé(ce) alors que cela suffirait autrement.
Raisons d'éviter synchronisé(ce)
Ces qui préconisent de ne pas utiliser synchronisé(ce) soutiennent que cela :
- expose un verrou qu'un code externe pourrait potentiellement voler ou utiliser de manière malveillante.
- Peut réduire le débit en provoquant le verrouillage de toutes les méthodes synchronisées au sein de la même classe sur le même verrou.
- Révèle des détails d'implémentation inutiles.
Arguments en faveur de synchronisé(ce)
D'autres soutiennent que synchronisé(this):
- Est un idiome couramment utilisé, bien compris et sûr.
- Ne doit pas être évité simplement parce qu'il fait partie d'un bug dans le code ou en raison à des malentendus sur la programmation multithread.
Monde réel Exemples
-
Accès sécurisé aux données sensibles : Si une classe contient des données sensibles qui ne doivent être accessibles que par un code autorisé, l'utilisation d'un verrou privé limite les personnes qui peuvent y accéder, empêchant un code malveillant de voler la référence.
-
Verrouillage différentiel : Parfois, différentes parties de la classe doivent être verrouillées indépendamment pour améliorer la concurrence. L'utilisation d'un verrou privé permet un verrouillage plus granulaire, évitant ainsi une synchronisation inutile sur des opérations non liées.
-
Séparation des préoccupations : Dans certains cas, il peut être souhaitable d'encapsuler le mécanisme de synchronisation dans une classe d'assistance. , en séparant les détails de synchronisation des informations métier logique.
Conclusion
Bien qu'éviter la synchronisation (cela) puisse être préférable dans certaines situations, cela ne doit pas être considéré comme une règle générale. Si les avantages de synchronisé(this) l'emportent sur les inconvénients potentiels, il doit être utilisé pour garantir la sécurité des threads et l'exactitude du code. La meilleure approche consiste à examiner attentivement les exigences spécifiques du code et à choisir le mécanisme de synchronisation approprié en conséquence.
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!