我正在阅读number of concurrent transaction per connection
。
我遇到了jdbc.postgresql.org/documentation/91/thread。 它说
如果一个线程在另一个线程正在使用该连接时尝试使用该连接,它将等待另一个线程完成其当前操作。
基于以上内容,如果我有1个连接的连接池(使用cp03
)
在一个线程中我做:
start transaction
Read query
sleep for 2 min
commit transaction
那么在第一个线程完成交易之前,其他线程应该无法运行任何查询......对吗?
但在我的观察中,我可以在第一个线程正在休眠时进行其他线程完成事务
为什么?我错过了什么?
编辑: CP03配置:
<property name="hibernate.connection.provider_class" value="org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider" />
<property name="hibernate.generate_statistics" value="false" />
<property name="hibernate.c3p0.max_size" value="1" />
<property name="hibernate.c3p0.min_size" value="0" />
<property name="hibernate.c3p0.acquire_increment" value="1" />
<property name="hibernate.c3p0.idle_test_period" value="300" />
<property name="hibernate.c3p0.max_statements" value="0" />
<property name="hibernate.c3p0.timeout" value="100" />
答案 0 :(得分:0)
此处的关键字为wait
。当有锁,wait
并且持有锁的线程转到sleep
或yield
时会发生什么?现在另一个线程可以使用连接。