8
votes

Synchronisation Java

Qu'est-ce que c'est:

synchronized (this) {
    // ...some code...
}


0 commentaires

4 Réponses :


16
votes

Il empêche l'accès simultané à une ressource. Sun a un une très bonne description avec des exemples.


0 commentaires

13
votes

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.

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.

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.

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).


0 commentaires

0
votes

de la référence rapide de Java désormais défunct Ancelier au http://www.janeg.ca/scjp/threads/synchronized.html :

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.


0 commentaires

11
votes

Notez que les deux suivants sont équivalents: xxx

et xxx


0 commentaires