Miles Sabin msabin at
Wed Dec 15 18:04:35 GMT 1999

Toivo Lainevool wrote,
> Miles Sabin wrote,
> > I fear there are some big problems here. In particular,
> ... snip ...
> > 	String name = (String)joinNameTable.get(qName);
> ... snip ...
> > Is rather nastily thread-unsafe: the shared qName could be
> > read/written by multiple threads in joinName(). You should
> > either synchronize this method, or create a new QName locally.
> Hashtable get() and put() are synchronized, so the read/write 
> operations are thread safe.  No need to have separate 
> synchronized blocks.

True but that wasn't the problem I was pointing to. You snipped
out the important bits and left the bit that was OK ;-)

    private static QName qName;

    public static String joinName
      (String uriPart, String localPart)
	qName.uri = uriPart;      // Unsynchronized write of
	qName.local = localPart;  // shared qName
	String name = (String)joinNameTable.get(qName);
                                         //   ^^^^^
                                         // Unsynchronized read of
                                         // shared qName
      // ... etc ...

Hashtable.get() being synchronized doesn't help here.



Miles Sabin                       Cromwell Media
Internet Systems Architect        5/6 Glenthorne Mews
+44 (0)20 8817 4030               London, W6 0LJ, England
msabin at

xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at
Archived as: and on CD-ROM/ISBN 981-02-3594-1
To unsubscribe, mailto:majordomo at the following message;
unsubscribe xml-dev
To subscribe to the digests, mailto:majordomo at the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at

More information about the Xml-dev mailing list