单例用来做缓存行吗?

最近做的一个东西里面的用户信息里面要有省份的信息,我建了一个表用来存省份id和省份名称,如province_id(省份id),province(省份名称),然后用户信息表里写的是province_id,但是后来发现province_id调用的地方很多,每次都要去查省份表得到省份,很耗资源(应该是耗资源的吧),于是决定把它做成缓存,就是写一个单例类,在构造函数里面将省份id,省份读到hashtable里面,然后给出一个getprovince的方法,根据省份id得到省份,不知道这样是不是可行,能不能达到节省资源的目的?

可以,这是缓存的基本原理

我还有个疑问,我们现在用的是tomcat做服务器,这个单例类会不会被回收掉,而不是一直存在于系统里面呢?

>单例类会不会被回收掉,
如果你这个单例类是使用静态单态模式实现,不会被收掉,而且不安全,它是JVM中的单例,在一个JVM中运行的多个Web项目都可以访问这个单例。

这是使用单例的一个陷阱,因此,你自己必须在编程将单例中的对象引用全部清除,否则造成内存泄漏。

建议将单例类放入Web容器的Application scope中,使用servletcontext.setAttribute保存这个类。

谢谢板桥的解答!
在我的理解,如果把一个类放到了 Application scope 里面,那么他在系统里面就应该只有一个实例,是这样吗?如果是的话,那为什么还要将这个类写成单例类呢?
板桥大哥能否解答一下,jive论坛的缓存是如何实现的?也是单例类吗?

这是两种实现单个实例的方式,有时单例指单态模式,有时就指单个实例。我觉得是单个实例比较好。

Jive缓存也是使用单例实现的。