对于对象池,我们说每当客户端请求资源时,我们都会从池中提供它。如果我签出了一个资源并更改了状态并将其签入。下一个请求会发生什么,池是否允许客户端检出此资源,或者此资源现在对于池无效?
答案 0 :(得分:1)
如果释放到池中的对象因重用而无效,则该池将毫无意义。如果类需要初始化或重新初始化,则可以在get()或release()池方法中执行此操作。如果重新初始化需要的不仅仅是简单的赋值,(例如,不能重复使用5分钟的套接字对象池),那么您可能不得不求助于专用的池管理器线程,该线程有效地将池拆分为几个水坑 - 那些可以重复使用的物品和那些等待重新初始化的物品。
RGDS, 马丁
答案 1 :(得分:0)
或者,或者,在资源恢复到其原始状态之前,不应将资源返回池。例如,假设您有一个带有侦听器线程和10个工作线程池的Web服务器。侦听器线程接受传入的http请求,并将它们分派给工作线程进行处理。池中的工作线程(未签出)处于其“原始”状态,即空闲或不处理请求。一旦监听器线程检出工作线程并给它一个http请求,工作线程就开始处理请求;换句话说,它的状态是“正常的”。一旦处理完请求并将http回复发送到客户端,它就会再次“空闲”并返回池中。因此,当前未从池中检出的所有线程始终处于其原始状态“空闲”。