Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #3880

Re: Concurrent bidirectional one-to-many map?

From Lew <noone@lewscanon.com>
Newsgroups comp.lang.java.programmer
Subject Re: Concurrent bidirectional one-to-many map?
Date 2011-05-09 18:36 -0400
Organization albasani.net
Message-ID <iq9q97$s81$1@news.albasani.net> (permalink)
References (3 earlier) <nsadnUZcjoF01ljQnZ2dnUVZ_gednZ2d@earthlink.com> <alpine.DEB.2.00.1105080428540.28763@urchin.earth.li> <08586289-8935-4532-93d0-e8c7dd45cb24@c1g2000yqe.googlegroups.com> <alpine.DEB.2.00.1105091825310.18864@urchin.earth.li> <iq9kf7$fr1$1@news.albasani.net>

Show all headers | View raw


Sebastian wrote:

> schrieb Tom Anderson:
>> Robert Klemme wrote:

>>> Tom Anderson wrote:
>>>>> Sebastian wrote:
>>>>> ...
>>>>>> To give an example, I'm trying to solve a problem like this:
>>>>>> Associate tasks with workspaces, where a workspace may hold many
>>>>>> tasks,but a task may be associate with at most one workspace.
>>>>> ...

>>> This could be solved by standard relationship implementations: Make
>>> workspace a member of Task and synchronize accesses on Task. Example:
>>>
>>> https://gist.github.com/962538
>>>
>>> By using monitors of Task and Workspace we have quite fine granularity
>>> of locking.

>> True! The fastest map is no map at all.
>>
>> If the OP can't modify Task or Workspace, perhaps he could consider
>> writing wrappers which refer to each other, a TaskWithWorkspace, and
>> WorkspaceWithTasks (perhaps with better names), and passing those around
>> rather than plain Tasks and Workspaces.

> I can't modify Task, or Workspace, and I won't do much "passing around"
> either, as I'm writing a component that will be called remotely (over
> RMI). But I suppose I could create a wrapper object for each
> Item/Workspace on the first call and look them up in maps indexed on
> the Item/Workspace id. Now I wonder if I just have shifted the problem
> to these maps?
>
> I'll have to brush up on "monitors" and look at the example.
>
> As for access patterns, that will depend on worker behavior. If they are
> well-behaved, they won't competemuch for tasks and finish them quickly, so I'd
> hope for about as many writes as reads.

"Monitor", very loosely speaking, is Javaese for "lock".  More specifically, 
every object in Java has a built-in lock that has the properties of a Hoare 
monitor.  I can't be bothered to look that up right now, but for us workaday 
Java programmers it means that thing that 'synchronized' locks.

  public class Lockaday
  {
    private static final State state = new State();

    synchronized           // class object's monitor
    public static void setState( State newState )
    {
      state.copy( newState );
    }

    synchronized           // class object's monitor
    public static State getState()
    {
       return state.clone();
    }

    private final Object lock = new Object();

    private Attribute attribute;

    public void setAttribute( Attribute newAttr )
    {
     synchronized ( lock ) // monitor of instance that 'lock' references
     {
       attribute = newAttr;
     }
    }

    public Attribute getAttribute()
    {
     synchronized ( lock ) // monitor of instance that 'lock' references
     {
       return attribute;
     }
    }

  }

-- 
Lew
Honi soit qui mal y pense.
http://upload.wikimedia.org/wikipedia/commons/c/cf/Friz.jpg

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Concurrent bidirectional one-to-many map? Sebastian <sebastian@undisclosed.invalid> - 2011-05-06 22:07 +0200
  Re: Concurrent bidirectional one-to-many map? markspace <-@.> - 2011-05-06 13:45 -0700
    Re: Concurrent bidirectional one-to-many map? Sebastian <sebastian@undisclosed.invalid> - 2011-05-07 11:43 +0200
      Re: Concurrent bidirectional one-to-many map? Lew <noone@lewscanon.com> - 2011-05-07 07:59 -0400
        Re: Concurrent bidirectional one-to-many map? Lew <noone@lewscanon.com> - 2011-05-07 12:49 -0400
          Re: Concurrent bidirectional one-to-many map? Sebastian <sebastian@undisclosed.invalid> - 2011-05-07 21:34 +0200
      Re: Concurrent bidirectional one-to-many map? Patricia Shanahan <pats@acm.org> - 2011-05-07 06:40 -0700
        Re: Concurrent bidirectional one-to-many map? Tom Anderson <twic@urchin.earth.li> - 2011-05-08 04:51 +0100
          Re: Concurrent bidirectional one-to-many map? Robert Klemme <shortcutter@googlemail.com> - 2011-05-09 06:43 -0700
            Re: Concurrent bidirectional one-to-many map? Tom Anderson <twic@urchin.earth.li> - 2011-05-09 18:28 +0100
              Re: Concurrent bidirectional one-to-many map? Sebastian <sebastian@undisclosed.invalid> - 2011-05-09 22:57 +0200
                Re: Concurrent bidirectional one-to-many map? Lew <noone@lewscanon.com> - 2011-05-09 18:36 -0400
                Re: Concurrent bidirectional one-to-many map? Tom Anderson <twic@urchin.earth.li> - 2011-05-10 08:34 +0100
                Re: Concurrent bidirectional one-to-many map? Sebastian <sebastian@undisclosed.invalid> - 2011-05-11 10:09 +0200
                Re: Concurrent bidirectional one-to-many map? Sebastian <sebastian@undisclosed.invalid> - 2011-05-11 10:51 +0200
                Re: Concurrent bidirectional one-to-many map? Robert Klemme <shortcutter@googlemail.com> - 2011-05-11 04:55 -0700
                Re: Concurrent bidirectional one-to-many map? Lew <noone@lewscanon.com> - 2011-05-11 09:00 -0400
                Re: Concurrent bidirectional one-to-many map? Sebastian <sebastian@undisclosed.invalid> - 2011-05-11 20:47 +0200
      Re: Concurrent bidirectional one-to-many map? markspace <-@.> - 2011-05-07 09:35 -0700
      Re: Concurrent bidirectional one-to-many map? Michal Kleczek <kleku75@gmail.com> - 2011-05-09 16:42 +0200
  Re: Concurrent bidirectional one-to-many map? Roedy Green <see_website@mindprod.com.invalid> - 2011-05-07 03:46 -0700

csiph-web