2016-04-28 55 views
2

我正在閱讀約number of concurrent transaction per connection每個連接Postgres併發事務

我碰到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

想要發佈您的cp03配置 –

+0

@ScaryWombat添加配置 – Bhuvan

回答

0

這裏的關鍵詞是wait。當發生鎖定時,會發生什麼情況?wait和保持鎖定的線程是sleep還是yield?現在另一個線程可以使用連接。