US

Synchronisation

On vient de voir, à la section précédente, que lorsque plusieurs threads accèdent en même temps à un même objet partagé, des problèmes peuvent survenir. Le problème était dû au fait que plusieurs threads pouvaient être en même temps, de manière concurrente, dans une même méthode qui modifie l'état de l'objet. Une solution pour pallier au problème consisterait à rendre l'exécution de la méthode en question atomique. C'est-à-dire que l'exécution de la méthode se passe en un seul bloc, indivisible. En effet, le scheduler peut arrêter l'exécution d'un thread après chaque instruction élémentaire exécutée. Dès lors, si l'exécution de la méthode apparait comme un bloc atomique, le problème qu'on a eu ne pourrait plus se produire. Ceci n'est pas réalisable en Java, mais on va quand même pouvoir résoudre le problème avec un autre mécanisme : la synchronisation.

Le mot réservé synchronized

On ne peut pas rendre l'exécution d'une méthode atomique en Java. Par contre, ce qu'on va pouvoir faire, c'est lorsqu'un thread est en train d'exécuter une méthode, empêcher l'accès à cette méthode à tous les autres threads. Et pour ce faire, c'est simple, il suffit de marquer la méthode avec le mot réservé synchronized. On va donc modifier la méthode withdraw de la classe BankAccount ainsi :