This is not a fully functional cache, there is no way of limiting or removing results once they have been generated. However, it is possible to get the implementation to regenerate the result for a given parameter, if an error was thrown during the previous calculation, by setting the option during the construction of the class. If this is not set the class will return the cached exception.
Thanks go to Brian Goetz, Tim Peierls and the members of JCP JSR-166 Expert Group for coming up with the original implementation of the class. It was also published within Java Concurrency in Practice as a sample.
| Modifier and Type | Field and Description |
|---|---|
| private final ConcurrentMap | |
| private final Function | |
| private final boolean |
| Access | Constructor and Description |
|---|---|
| public | Memoizer(final Computable<I, O>
the computation whose results should be memorized computable)Constructs a Memoizer for the provided Computable calculation. |
| public | Memoizer(final Computable<I, O>
the computation whose results should be memorized computable, final boolean determines whether the computation should be recalculated on subsequent calls if the previous call
failed recalculate)Constructs a Memoizer for the provided Computable calculation, with the option of whether a Computation that experiences an error should recalculate on subsequent calls or return the same cached exception. |
| public | |
| public | Memoizer(final Function<I, O>
the computation whose results should be memorized function, final boolean determines whether the computation should be recalculated on subsequent calls if the previous call
failed recalculate)Constructs a Memoizer for the provided Function calculation, with the option of whether a Function that experiences an error should recalculate on subsequent calls or return the same cached exception. |
| Modifier and Type | Method and Description |
|---|---|
| public O | Returns: the result of the calculationthe argument for the calculation arg)Implements org. This method will return the result of the calculation and cache it, if it has not previously been calculated. |
| private RuntimeException | Returns: a RuntimeException, Error or an IllegalStateExceptionthe throwable to laundered throwable)This method launders a Throwable to either a RuntimeException, Error or any other Exception wrapped in an IllegalStateException. |
| cache | back to summary |
|---|---|
| private final ConcurrentMap<I, Future<O>> cache | |
| mappingFunction | back to summary |
|---|---|
| private final Function<? super I, ? extends Future<O>> mappingFunction | |
| recalculate | back to summary |
|---|---|
| private final boolean recalculate | |
| Memoizer | back to summary |
|---|---|
| public Memoizer(final Computable<I, O> computable) Constructs a Memoizer for the provided Computable calculation. If a calculation throws an exception for any reason, this exception will be cached and returned for all future calls with the provided parameter.
| |
| Memoizer | back to summary |
|---|---|
| public Memoizer(final Computable<I, O> computable, final boolean recalculate) Constructs a Memoizer for the provided Computable calculation, with the option of whether a Computation that experiences an error should recalculate on subsequent calls or return the same cached exception.
| |
| Memoizer | back to summary |
|---|---|
| public Memoizer(final Function<I, O> function) Constructs a Memoizer for the provided Function calculation. If a calculation throws an exception for any reason, this exception will be cached and returned for all future calls with the provided parameter.
| |
| Memoizer | back to summary |
|---|---|
| public Memoizer(final Function<I, O> function, final boolean recalculate) Constructs a Memoizer for the provided Function calculation, with the option of whether a Function that experiences an error should recalculate on subsequent calls or return the same cached exception.
| |
| compute | back to summary |
|---|---|
| public O compute(final I arg) throws InterruptedException Implements org. This method will return the result of the calculation and cache it, if it has not previously been calculated.
This cache will also cache exceptions that occur during the computation if the
| |
| launderException | back to summary |
|---|---|
| private RuntimeException launderException(final Throwable throwable) This method launders a Throwable to either a RuntimeException, Error or any other Exception wrapped in an IllegalStateException.
| |