in archaius2-core/src/main/java/com/netflix/archaius/property/DefaultPropertyContainer.java [155:179]
public void addListener(final PropertyListener<T> listener) {
listeners.add(listener, new ListenerUpdater() {
private final AtomicReference<T> last = new AtomicReference<T>(null);
@Override
public void update() {
final T prev = last.get();
final T value;
try {
value = get();
}
catch (Exception e) {
listener.onParseError(e);
return;
}
if (prev != value) {
if (last.compareAndSet(prev, value)) {
listener.onChange(value);
}
}
}
});
}