ich den Netflix-Code zu sehen, die in der Klasse DynamicPropertyFactory, gibt es eine Methode, wiedurch synchronisierte Nutzung verwirrt
public static DynamicPropertyFactory getInstance() {
if (config == null) {
synchronized (ConfigurationManager.class) {
if (config == null) {
AbstractConfiguration configFromManager = ConfigurationManager.getConfigInstance();
if (configFromManager != null) {
initWithConfigurationSource(configFromManager);
initializedWithDefaultConfig = !ConfigurationManager.isConfigurationInstalled();
logger.info("DynamicPropertyFactory is initialized with configuration sources: " + configFromManager);
}
}
}
}
return instance;
}
ich auf dieser Methode bin verwirrt, warum synchronized (ConfigurationManager.class)
verwenden, synchronisiert Schlüsselwort auf einer anderen Klasse ConfigurationManager.class
verwendet wurde. Aus meiner Sicht wird synchronisiert in seiner aktuellen Klasse verwendet. Also, kann jemand helfen, das einfach zu erklären?
Ja, das Klassenstufe Synchronisation ist. Beachten Sie, dass die DynamicPropertyFactory eine Klassenmethode ist. – Henry
, aber es ist synchronisiert (ConfigurationManager.class) nicht synchronisiert (DynamicPropertyFactory.class), also .. – lawrence
Sie möchten nur einmal die Konfiguration der Klassenvariablen initialisieren. Während der Initialisierung Klassenmethode getConfigInstance in der Klasse ConfigurationManager wird aufgerufen, das ist der Grund sie Klassenebene Synchronisation (Klassensperre) verwenden – Henry