b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

softreference_referencequeue作用_java 虚引用(4)

电脑杂谈  发布时间:2017-05-28 02:00:54  来源:网络整理

static private EmployeeCache cache;// 一个Cache实例

private Hashtable<String,EmployeeRef> employeeRefs;// 用于Chche内容的存储

private ReferenceQueue<Employee> q;// 垃圾Reference的队列

// 继承SoftReference,使得每一个实例都具有可识别的标识。

private class EmployeeRef extends SoftReference<Employee> {

private String _key = "";

public EmployeeRef(Employee em, ReferenceQueue<Employee> q) {

super(em, q);

_key = em.getID();

}

}

// 构建一个缓存器实例

private EmployeeCache() {

employeeRefs = new Hashtable<String,EmployeeRef>();

q = new ReferenceQueue<Employee>();

java 虚引用_referencequeue作用_softreference

}

// 取得缓存器实例

public static EmployeeCache getInstance() {

if (cache == null) {

cache = new EmployeeCache();

}

return cache;

}

// 以软引用的方式对一个Employee对象的实例进行引用并保存该引用

private void cacheEmployee(Employee em) {

cleanCache();// 清除垃圾引用

EmployeeRef ref = new EmployeeRef(em, q);

employeeRefs.put(em.getID(), ref);

}

// 依据所指定的ID号,重新获取相应Employee对象的实例

public Employee getEmployee(String ID) {

Employee em = null;

// 缓存中是否有该Employee实例的软引用,如果有,从软引用中取得。

if (employeeRefs.containsKey(ID)) {

EmployeeRef ref = (EmployeeRef) employeeRefs.get(ID);

em = (Employee) ref.get();

}

// 如果没有软引用,或者从软引用中得到的实例是null,重新构建一个实例,

// 并保存对这个新建实例的软引用

if (em == null) {

em = new Employee(ID);

System.out.println("Retrieve From EmployeeInfoCenter. ID=" ID);

this.cacheEmployee(em);

}

return em;

}

private void cleanCache() {

EmployeeRef ref = null;

while ((ref = (EmployeeRef) q.poll()) != null) {

employeeRefs.remove(ref._key);

}

}

// 清除Cache内的全部内容

public void clearCache() {

cleanCache();

employeeRefs.clear();

System.gc();

System.runFinalization();

}

}

注:原来ReferenceQueue起到一个器的效果,当发现SoftReference.get()方法返回的是null时,就会将SoftReference注册到自己里面队列里,当我们调用ReferenceQueue的poll()方法时,返回并删除该SoftReference。softreference


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-49628-4.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...