早上好,我目前正在开发一个公开 Web 服务接口的 Java Web 应用程序。为了将全局对象保留在内存中,我将以下类用作 Singleton:
public class SingletonMap {
private static final SingletonMap instance = new SingletonMap();
private static HashMap couponMap = null;
private static long creationTime;
private SingletonMap() {
creationTime = System.currentTimeMillis();
couponMap = new HashMap();
}
public static synchronized SingletonMap getInstance() {
return instance;
}
public static long getCreationTime() {
return creationTime;
}
}
我正在使用上面的类,以便为 Web 服务的所有线程提供相同的 HashMap 实例。维护 SingletonMap 对象的 Web 服务类如下:
@WebService()
public class ETL_WS {
private String TOMCAT_TEMP_DIR;
private final int BUFFER_SIZE = 10000000;
private static SingletonMap couponMap;
private static SingletonProductMap productCategoryMap;
private String dbTable = "user_preferences";
public ETL_WS() {
Context context = null;
try {
context = (Context) new InitialContext().lookup("java:comp/env");
this.TOMCAT_TEMP_DIR = (String) context.lookup("FILE_UPLOAD_TEMP_DIR");
}catch(NamingException e) {
System.err.println(e.getMessage());
}
public long getCouponMapCreationTime() {
return couponMap.getCreationTime();
}
}
我使用 getCouponMapCreationTime() 方法的原因是检查 Web 服务的所有线程是否正在访问同一个对象。上述方法是否正确?性能开销如何?你认为我需要 Singleton 属性,还是我可以只为所有线程使用静态 HashMap?如果我使用静态 HashMap,如果没有线程处于活动状态,它会被垃圾收集吗?
感谢您的时间。