ColdFusion单例对象池

时间:2012-03-22 10:54:00

标签: multithreading coldfusion thread-safety singleton

在我们的ColdFusion应用程序中,我们有无状态模型对象。 我想要的所有数据都可以通过一个方法调用获得(它在内部调用其他方法而不保存状态)。

方法通常会向数据库询问数据。所有方法都是只读的,所以我不必担心线程安全(如果我错了请纠正我。)

因此根本不需要实例化对象。我可以静态地调用它们,但是ColdFusion没有静态方法 - 调用该方法意味着首先实例化对象。

为了提高性能,我为每个Model对象创建了单例。 到目前为止它工作得很好 - 每个对象都创建一次,然后根据需要进行访问。

现在我担心的是,所有数据请求只会通过1个模型对象。 我是不是该?我的意思是如果在我的对象上我有一个方法getOfferData(),这是耗时的。 如果有几个客户想要访问它会怎么样? 第二个请求等待第一个请求完成还是在单独的线程中执行? 毕竟它是同一个对象。

我应该为此实现某种对象池吗?

1 个答案:

答案 0 :(得分:6)

您使用的单例模式不会导致您描述的问题。如果当另一个对该函数的调用在另一个请求上被调用时,getOfferData()仍在运行,那么除非您执行以下操作之一,否则不会导致它排队: -

  1. 使用cflock授予独占锁
  2. 由于锁定/交易而获取连接到您的数据库的排队
  3. 你运行的东西太多了,你使用ColdFusion可用的所有可用并发线程
  4. 所以你的方式很好。

    希望有所帮助。