鏈接是同步的,由於鏈接所對應的資源是有限的:物理通道。安全
可是STATEMENT即會話不是同步的。會話層承載的不是通訊,而是對話。通訊須要同步是由於有限資源,對話層創建在通訊層的基礎上,既然通訊層已經同步了,爲何還要在會話層再同步一次呢。意思是,對有限資源:物理通道,的同步,已經在通訊層實現了,沒有必要再在會話層實現它。通訊須要同步可是會話不須要的另外一個緣由是,沒有任何理由要求全部會話按照必定的順序來進行。即:一次對話必須在另外一次對話完成之後才能開始。。。沒有任何這方面的充足理由。通道擺在那裏的緣由就是爲會話提供服務,而通道是全雙工的,爲何我要固守一個一個來的原則。必定要那樣作,那固然是愚蠢的。服務器
能夠在一個通道上同時進行多個對話。這麼作的緣由是,通道是全雙工的。若是在對話的回覆等待期間傻傻地等待,那是一件很是愚蠢的事情。由於通道在這段時間內被浪費了(這即是爲何使用多個鏈接的併發策略的確「有效」的緣由了------由於多個鏈接雖然沒有共享通道,可是它們共享了服務器端資源。而通道共享的目的顯然也是爲了共享服務器端資源------對通道的任何使用,最終目的都是爲了獲得服務器端所提供的服務!)。多線程
下面是微軟的JDBC DRIVER使用指南:併發
經過 Microsoft SQL Server 2005 JDBC Driver SQLServerConnection 對象進行的通訊是同步的,所以可安全地執行在多個線程中共享一個鏈接的語句。Statement 和 SQLServerResultSet 類不是線程安全的。全部與 SQL Server Database Engine 的通訊都在鏈接級別同步。在 JDBC 中,事務控制(例如提交和回滾)是在鏈接級別實現的。所以,若是多線程須要獨立的事務控制,則它們必須分別建立和操做本身的鏈接。spa
下列驅動程序線程方案是有效的:線程
意思是,鏈接是同步的。由於鏈接被假設爲將被多線程共享。可是句子是不一樣步的,由於句子被假設爲將不被多線程共享。由於沒有理由這麼作。爲何我會須要在一個線程執行一個句子,同時在另外一個線程執行一樣的句子呢?一個句子執行一次就能夠了。將一個句子執行兩次是沒有意義的。code
因此沒有必要!對象
問題是,當句子執行的時候,確定是要調用鏈接層的東西的。那麼在這個時候,鏈接層到底有沒有提供併發的對話支持?由於要提供對併發對話的支持,它必須在內存中管理多個對話,也就是說,它必須在其中實現併發式的會話能力。事務