synchronized (urlloaders)
synchronized (this)
  private void addURLImpl(URL newUrl)  {    synchronized (urlloaders)      {	if (newUrl == null)	  return; // Silently ignore...        	// Reset the toString() value.	thisString = null;	// Check global cache to see if there're already url loader	// for this url.	URLLoader loader = (URLLoader) urlloaders.get(newUrl);	if (loader == null)	  {	    String file = newUrl.getFile();	    String protocol = newUrl.getProtocol();	    // Check that it is not a directory	    if (! (file.endsWith("/") || file.endsWith(File.separator)))	      loader = new JarURLLoader(this, newUrl);	    else if ("file".equals(protocol))	      loader = new FileURLLoader(this, newUrl);	    else	      loader = new RemoteURLLoader(this, newUrl);	    // Cache it.	    urlloaders.put(newUrl, loader);	  }	urlinfos.add(loader);	Vector extraUrls = loader.getClassPath();	if (extraUrls != null)	  {	    Iterator it = extraUrls.iterator();	    while (it.hasNext())	      {		URL url = (URL)it.next();		URLLoader extraLoader = (URLLoader) urlloaders.get(url);		if (! urlinfos.contains (extraLoader))		  addURLImpl(url);	      }	  }      }  }