Postgres每个连接的并发事务

时间:2016-04-28 07:16:05

标签: java multithreading hibernate postgresql jdbc

我正在阅读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" />

1 个答案:

答案 0 :(得分:0)

此处的关键字为wait。当有锁,wait并且持有锁的线程转到sleepyield时会发生什么?现在另一个线程可以使用连接。