Qu'est-ce que c'est:
synchronized (this) { // ...some code... }
4 Réponses :
Il empêche l'accès simultané à une ressource. Sun a un une très bonne description avec des exemples. p>
Il empêche plusieurs threads d'exécuter le code contenu dans les accolades. Tandis que un fil est en cours d'exécution, le reste est bloqué. Lorsque le premier fil se termine, l'un des threads bloqués exécutera ensuite le code synchronisé, etc. p>
Pourquoi voulez-vous faire cela? Le code dans le bloc peut modifier des objets de manière à ce qu'ils soient dans un état incohérent jusqu'à ce que les blocs sortent. Donc, un deuxième fil à venir trouverait des objets incohérents. De ce point sur le chaos s'ensuit. P>
Un exemple retirerait un objet d'un pool et l'insérant dans une autre. Un deuxième thread peut être exécuté tandis que le premier thread bouge de l'objet et trouve ensuite l'objet référencé dans les deux collections ou non ni. P>
Vous pouvez également utiliser ce mécanisme pour limiter plusieurs threads d'accéder à une ressource conçue pour être utilisée par une ressource (par exemple une base de données triviale, par exemple). P>
de la référence rapide de Java désormais défunct Ancelier au Les threads de synchronisation ont l'effet
de sérialiser l'accès aux blocs de
Code exécutant sur le fil.
Serializing dans ce contexte signifie
donner un fil à la fois le droit
exécuter un bloc de code spécifique. p>
blockQuote> http://www.janeg.ca/scjp/threads/synchronized.html code>: p>
Notez que les deux suivants sont équivalents: et p>