diff -r 000000000000 -r 08dd52950883 samples/deadlock/src/org/apidesign/javamonitorflaws/Cache.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/deadlock/src/org/apidesign/javamonitorflaws/Cache.java Tue Feb 10 18:36:21 2009 +0100 @@ -0,0 +1,40 @@ +package org.apidesign.javamonitorflaws; + +import java.util.HashMap; +import java.util.Map; + +/** + * + * @author Jaroslav Tulach + */ +public abstract class Cache { + private Map cache; + + public final To get(From f) { + for (;;) { + synchronized (this) { + if (cache == null) { + cache = new HashMap(); + } + To t = cache.get(f); + if (t != null) { + return t; + } + } + + To newT = createItem(f); + + synchronized (this) { + To t = cache.get(f); + if (t == null) { + cache.put(f, newT); + return newT; + } else { + return t; + } + } + } + } + + protected abstract To createItem(From f); +}