This is the direction I usually do it in...I use an implementation much like this one when I want good atomicity on event broadcasting without excessive synchronization. Generally, on an event listener array or something, I will have small sync blocks around the critical method calls for methods manipulating the array, then will do a synchronized wrap around an array copy (with clone() or whatnot) so that I can then send the events asynchronously and not worry about the event listener array changing.
I've never seen it done the backwards way like that, but I guess it might work. -----Original Message----- From: Dain Sundstrom [mailto:[EMAIL PROTECTED]] Sent: Thursday, February 13, 2003 12:36 PM To: [EMAIL PROTECTED] Subject: Re: [JBoss-dev] Why are we using this bogus construct This seems backwards to me. I usually do something like this: class X { HashMap clients = new HashMap(); public void someMethod() { synchronized(clients) { m.put(dc, cq); } ... } public void someOtherMethod() { HashMap clientsCopy = null; synchronized(clients) { clientsCopy = new HashMap(clients); } Iterator i = clientsCopy.keySet().iterator(); while( i.hasNext() ) { ... } } } For the insert, you only get a quick synchronized around the add, and on iteration you get a single copy in the synchronize. If the iteration very small and quick, I sometimes put the entire iteration in the synchronized block, but you need to be careful about open calls. -dain On Thursday, February 13, 2003, at 11:20 AM, Scott M Stark wrote: > I have seen this usage construct in a few places in the code and it > makes > no sense to me: > > class X > { > HashMap clients = new HashMap(); > > public void someMethod() > { > synchronized(clients) > { > HashMap m = new HashMap(clients); > m.put(dc, cq); > clients=m; > } > ... > } > public void someOtherMethod() > { > Iterator i = clients.keySet().iterator(); > while( i.hasNext() ) > { > ... > } > } > } > > The unsynchronized clients HashMap is synchronized and copied when > modified and accessed without synchronization in other contexts. This > is > not thread safe for the accesses and makes for very expensive updates. > Why isn't the HashMap simply synchronized and used without copying? > > xxxxxxxxxxxxxxxxxxxxxxxx > Scott Stark > Chief Technology Officer > JBoss Group, LLC > xxxxxxxxxxxxxxxxxxxxxxxx > > > ------------------------------------------------------- > This SF.NET email is sponsored by: FREE SSL Guide from Thawte > are you planning your Web Server Security? Click here to get a FREE > Thawte SSL guide and find the answers to all your SSL security issues. > http://ads.sourceforge.net/cgi-bin/redirect.pl?thaw0026en > _______________________________________________ > Jboss-development mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/jboss-development ------------------------------------------------------- This SF.NET email is sponsored by: FREE SSL Guide from Thawte are you planning your Web Server Security? Click here to get a FREE Thawte SSL guide and find the answers to all your SSL security issues. http://ads.sourceforge.net/cgi-bin/redirect.pl?thaw0026en _______________________________________________ Jboss-development mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-development ------------------------------------------------------- This SF.NET email is sponsored by: FREE SSL Guide from Thawte are you planning your Web Server Security? Click here to get a FREE Thawte SSL guide and find the answers to all your SSL security issues. http://ads.sourceforge.net/cgi-bin/redirect.pl?thaw0026en _______________________________________________ Jboss-development mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-development