author | Jaroslav Tulach <jtulach@netbeans.org> |
Tue, 10 Feb 2009 18:36:21 +0100 | |
changeset 315 | 08dd52950883 |
child 316 | 41a4abecb600 |
permissions | -rw-r--r-- |
1 package org.apidesign.javamonitorflaws;
3 import java.util.HashMap;
4 import java.util.Map;
6 /**
7 *
8 * @author Jaroslav Tulach <jtulach@netbeans.org>
9 */
10 public abstract class Cache<From,To> {
11 private Map<From,To> cache;
13 public final To get(From f) {
14 for (;;) {
15 synchronized (this) {
16 if (cache == null) {
17 cache = new HashMap<From, To>();
18 }
19 To t = cache.get(f);
20 if (t != null) {
21 return t;
22 }
23 }
25 To newT = createItem(f);
27 synchronized (this) {
28 To t = cache.get(f);
29 if (t == null) {
30 cache.put(f, newT);
31 return newT;
32 } else {
33 return t;
34 }
35 }
36 }
37 }
39 protected abstract To createItem(From f);
40 }