Disons que j'ai une classe dans mon application Web appelée classe "Foo". Il a une méthode initialise() qui est appelée lorsque le bean est créé en utilisant Spring. La méthode initialise() essaie ensuite de charger un service externe et de l'assigner à un champ. Si le service n'a pas pu être contacté, le champ sera défini sur null.Java Web Application Sync Question
private Service service;
public void initialise() {
// load external service
// set field to the loaded service if contacted
// set to field to null if service could not be contacted
}
Quand quelqu'un appelle la méthode get() de la classe « Foo » le service sera invoquée si elle a commencé dans la méthode Initialise(). Si le champ pour le service est null, je veux essayer de charger le service externe.
public String get() {
if (service == null) {
// try and load the service again
}
// perform operation on the service is service is not null
}
Est-il possible que je puisse avoir des problèmes de synchronisation si je devais faire quelque chose comme ça?
merci pour cela! bonne idée avec le refactoring;) – digiarnie
C'est une forme de double-vérification de verrouillage, et donc: 1. Cela ne fonctionne qu'avec Java 5 ou plus tard. 2. "service" devrait être déclaré volatile. –
Référence: http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html –