private static WeakHashMap lockerMap = new WeakHashMap(); private final String id; private Locker(String id) { this.id= id; }
public synchronized static Locker acquire(String id) { Locker locker = lockerMap.get(key); if (locker == null) {
locker = new Locker(id);
lockerMap.put(id, locker); //问题代码,导致了entry.key == entry.value.id
//lockerMap.put(new String(id), locker); //这是⼀种修改⽅式,保证了WeakHashMap中的key,没有被value直接或间接所引⽤ }
return locker; }
public String getId() { return this.id; }
public static int getSize() { return lockerMap.size(); } }
public class LockerTest extends TestCase { public void testLocker() {
for (int i = 0; i < 10000000; i++) { Locker.acquire(\"abc\" + i); if (i % 10000 == 0) { System.gc();
System.out.println(Locker.getSize()); //输出垃圾回收后的Map的Size } } } }
因篇幅问题不能全部显示,请点此查看更多更全内容