code: public void addObserver(PropertySetter observer, String... properties)
      {
          try
          {
              semaphore.acquire();
          }
          catch (InterruptedException ex)
          {
              throw new IllegalArgumentException(ex);
          }
          try
          {
              addObserver(observer);
              for (String p : properties)
              {
                  observers.addObserver(p, observer);
              }
          }
          finally
          {
              semaphore.release();
          }
      }
docs: Adds a PropertySetter observer for properties.
  @param observer
  @param properties