[concurrency-interest] JCiP Memoizer

Joe Bowbeer joe.bowbeer at gmail.com
Wed Oct 18 01:01:24 EDT 2006


On 10/17/06, Alexandru Popescu <the.mindstorm.mailinglist at gmail.com> wrote:
>
> I would start by saying that till now Chapter 5 is my favorite so far
> :">. Still, I have a small problem (indeed it is 5am) understanding
> the final version of Memoizer (page 108), or at least one line from
> it:
>
> public V compute(final A arg) throws InterruptedException {
>    while(true) {
>             // code
>     }
> }
>

It's because of this line further down:

            } catch (CancellationException e) {
                cache.remove(arg, f);

from http://jcip.net/listings/Memoizer.java

Here's a partial explanation:

The memoizing compute method is trying to reflect the exception from
the wrapped method back to the caller, but it also has to handle the
case where the task may have been cancelled (somehow).

In this case, the compute method removes its task from the cache (iff
it created the task) and tries again.

--Joe


More information about the Concurrency-interest mailing list