code: public synchronized Object put(Object key, Object value) {
          check("putProviderProperty."+name);
  //        if (debug != null) {
  //            debug.println("Set " + name + " provider property [" +
  //                          key + "/" + value +"]");
  //        }
          return implPut(key, value);
      }
docs: Sets the <code>key</code> property to have the specified
  <code>value</code>.
  
  <p>First, if there is a security manager, its
  <code>checkSecurityAccess</code> method is called with the string
  <code>"putProviderProperty."+name</code>, where <code>name</code> is the
  provider name, to see if it's ok to set this provider's property values.
  If the default implementation of <code>checkSecurityAccess</code>
  is used (that is, that method is not overriden), then this results in
  a call to the security manager's <code>checkPermission</code> method
  with a <code>SecurityPermission("putProviderProperty."+name)</code>
  permission.
  
  @param key the property key.
  
  @param value the property value.
  
  @return the previous value of the specified property
  (<code>key</code>), or null if it did not have one.
  
  @throws  SecurityException
  if a security manager exists and its <code>{@link
  java.lang.SecurityManager#checkSecurityAccess}</code> method
  denies access to set property values.
  
  @since 1.2