1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/samples/deadlock/src/org/apidesign/javamonitorflaws/Cache.java Tue Feb 10 18:36:21 2009 +0100
1.3 @@ -0,0 +1,40 @@
1.4 +package org.apidesign.javamonitorflaws;
1.5 +
1.6 +import java.util.HashMap;
1.7 +import java.util.Map;
1.8 +
1.9 +/**
1.10 + *
1.11 + * @author Jaroslav Tulach <jtulach@netbeans.org>
1.12 + */
1.13 +public abstract class Cache<From,To> {
1.14 + private Map<From,To> cache;
1.15 +
1.16 + public final To get(From f) {
1.17 + for (;;) {
1.18 + synchronized (this) {
1.19 + if (cache == null) {
1.20 + cache = new HashMap<From, To>();
1.21 + }
1.22 + To t = cache.get(f);
1.23 + if (t != null) {
1.24 + return t;
1.25 + }
1.26 + }
1.27 +
1.28 + To newT = createItem(f);
1.29 +
1.30 + synchronized (this) {
1.31 + To t = cache.get(f);
1.32 + if (t == null) {
1.33 + cache.put(f, newT);
1.34 + return newT;
1.35 + } else {
1.36 + return t;
1.37 + }
1.38 + }
1.39 + }
1.40 + }
1.41 +
1.42 + protected abstract To createItem(From f);
1.43 +}