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

Reply via email to