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


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

Re: Concurrent bidirectional one-to-many map?

From Tom Anderson <twic@urchin.earth.li>
Newsgroups comp.lang.java.programmer
Subject Re: Concurrent bidirectional one-to-many map?
Date 2011-05-10 08:34 +0100
Organization Stack Usenet News Service
Message-ID <alpine.DEB.2.00.1105100824001.25309@urchin.earth.li> (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


On Mon, 9 May 2011, Sebastian wrote:

> Am 09.05.2011 19:28, schrieb Tom Anderson:
>> On Mon, 9 May 2011, Robert Klemme wrote:
>> 
>>> On 8 Mai, 05:51, Tom Anderson <t...@urchin.earth.li> wrote:
>>>>> On 5/7/2011 2:43 AM, 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 don't think you have. The contents of those maps will never change - you 
will need to add a new mapping when you first see a new key, but the 
mapping will never change (except to be removed), and mappings in the two 
maps are independent.

> I'll have to brush up on "monitors" and look at the example.

They're pretty simple. A thread can lock something, and later unlock it. 
If a thread has already locked something, it can lock it again, but must 
make a corresponding number of unlocks to unlock it. If another thread has 
already locked something, the thread trying to lock it will wait until 
it's unlocked. Acquisition and release of different locks must be nested 
(ie lock A, lock B, release A, release B is impossible). While holding a 
lock, a thread can wait and notify on an object, which is something you 
probably won't need.

For the master maps, though, i'd look at using a ConcurrentMap, which does 
not involve locking the whole map. You want to look at the putIfAbsent 
method in particular.

You probably will want to use monitors for the WorkspaceWrapper and 
TaskWrapper's relationships with each other, though.

tom

-- 
My dad gave to me a MSX and magazines to read and type programs, mostly
adventure games. I falling in love to the letter soap. -- clrod

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