java中的连接池

java中的连接池,java,concurrency,pool,Java,Concurrency,Pool,我需要在Java中创建一个自定义连接池,如果用户请求连接并在使用后返回到连接池,但他可以通过将连接分配给某个变量来维护对连接的引用 因为他已经返回到池的连接,所以我可以将其提供给任何其他用户。现在两个用户将拥有相同的连接对象,这是错误的 如何通过避免这种情况来创建连接池 这个问题是在一次采访中提出的。我知道有很多库提供了这一功能,但它们是如何在内部实现这一功能的。看起来您正在描述UCP(通用连接池)的一个称为连接标签的功能。您可能需要查看问题。请编辑问题,将其限制为特定问题,并提供足够详细的信息

我需要在Java中创建一个自定义连接池,如果用户请求连接并在使用后返回到连接池,但他可以通过将连接分配给某个变量来维护对连接的引用

因为他已经返回到池的连接,所以我可以将其提供给任何其他用户。现在两个用户将拥有相同的连接对象,这是错误的

如何通过避免这种情况来创建连接池


这个问题是在一次采访中提出的。我知道有很多库提供了这一功能,但它们是如何在内部实现这一功能的。

看起来您正在描述UCP(通用连接池)的一个称为连接标签的功能。您可能需要查看问题。

请编辑问题,将其限制为特定问题,并提供足够详细的信息,以确定适当的答案。整本书和教程都是关于这些主题的;人们花了很多时间来实现这一点。这样一个主题与一个SO问题/答案相匹配的可能性接近于0。有这样的要求也很奇怪。如果用户返回到池的连接(通常通过调用
close()
),他将无法再使用它–这将是客户端代码中的一个错误。通过使用带有内部
closed
标志的连接包装器,可以很容易地防止这种情况,该标志可防止调用
close()
后的任何调用。但这是许多实现的标准配置,不需要重新发明轮子。解决方案是对客户端代理使用PhantomReference(这是比
终结器
更有效的替代方案)。收集代理时,对池的通知允许它回收连接并使其可供其他人使用。请看下面的详细说明。