现在的位置: 首页 > 综合 > 正文

对象池

2017年11月10日 ⁄ 综合 ⁄ 共 558字 ⁄ 字号 评论关闭

我的看法:如果你的类是线程安全,就没有必要使用对象池,直接使用singleton的对象就可以了,当然如果你的对象的创建代价很低,每次调用新创建也无妨!

至于使用对象池的条件是:
1。该对象线程不安全,同时只能有一个Thread访问。
2。该对象会被频繁创建,并且创建对象比较耗资源。

例如一个Servlet Container,request, response等对象(当然还应该包括来处理请求的thread本身)很显然是线程不安全的,如果每次调用(例如一次get或post请求)都创建相应对象,显然太过浪费和低效(经常每秒钟需要处理几百甚至上万次请求),这时使用对象池就很合适。而对于非SingleThreadedModel的Servlet,完全可以不必使用对象池(为了更高效避免反复创建,一般ServletContainer都会保存一个singleton的对象重复使用)

当然这里有一个例外:如果你的线程安全的对象是通过关键字synchronized来监视对象锁来保证的(也就是调用过程中可能存在锁等待),使用单一对象可能就有很大的性能问题(调用的相互等待),这时你可能需要使用对象池或者每次创建对象。

如果这么说的话,就做成static算了,如果在系统中只用一个实例,而且使用的地方比较多,做成singleton的话会安全一些

抱歉!评论已关闭.