docs: @Override
      public void accept(Set<String> propertyNames) {
          if (!isClosed()) {
              synchronized (this) {
                  for (Map.Entry<PropertyChangeListener, String> entry : listeners.entrySet()) {
                      String propertyName = entry.getValue();
                      if (propertyNames.contains(propertyName)) {
                          PropertyChangeListener listener = entry.getKey();
                          listener.onPropertyChanged();
                      }
                  }
              }
          }
      }