我在MySQL中面临与GET_LOCK
相关的一些用法。我正在使用c3p0
连接提供程序。 getConnection()
中的c3P0
方法每次都会创建新连接还是重用连接?
答案 0 :(得分:1)
DataSource上的getConnection从连接池获取连接。如果没有任何可用且未达到maxPoolSize,则会打开新连接。如果达到maxPoolSize,则等待某些连接返回池。 (它必须由正在使用它的线程释放)
线程释放连接后,它将返回到池中,并可能被其他一些线程重用。
答案 1 :(得分:0)
c3p0维护一个Connections池,可以为多个客户端重用。
但是,您不能假设您使用的Connection将是您将再次看到的Connection。您可能会收到来自c3p0池的任何连接,无法保证或您可能会看到您已经看过的。并且,根据您的配置,c3p0测试,到期,并替换幕后的连接。
如果您尝试在一个客户端会话中将锁与Connection关联,然后在另一个客户端会话中将其释放,那么这将无法正常工作并且会快速破解。实际上,通过任何显式锁定,您的获取和发布应该在一个客户端会话中完成,使用try / finally语义来确保锁定释放。