早上好,我目前正在开发一个公开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;
}
}
我才能有HashMap中的同一个实例为Web服务的所有线程使用上述类。 即保持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服务的所有线程都访问同一个对象。 是上面的方法正确吗? 怎么样性能方面的开销? 你觉得我需要的单身属性,或者我可以只使用所有线程静态HashMap的? 如果我使用一个静态HashMap中,莫非要被垃圾收集的情况下,没有线程处于活动状态?
感谢您的时间。