JDBC中STATEMENT的执行是同步的。但是非阻塞的。即,不同的STATEMENT间并不会互相阻塞。这一点与NIO是相似的。
同步的论域是纵向的。它表达的是模块间的协作模型。
阻塞的论域是横向的。它表达的是线程间的协作模型。维基上的解释也是这样的:http://en.wikipedia.org/wiki/Non-blocking_algorithm:
...The traditional approach to multi-threaded programming is to use locks to synchronize access to shared resources...
两者的语义都是动态的。模块协作与线程协作都是运行时语义。分别用来描述程序或系统内的纵向与横向协作。模块协作肯定是分时间进行的。而线程协作却有可能是或至少可以看成是同时进行的。
如果JDBC CONNECTION类的的所有STATEMENT操作都是非阻塞的,那么意味着同一个连接的STATEMENTS可以同时进行它们的动作。这样的话,就没有必要一定要用多个连接去连接同一个数据库。
如果用一个连接就可以达到同时即并发与数据库通信的目的,那我为什么要用连接池呢?特别是在并不存在任何事务性需求的环境下?
来源:oschina
链接:https://my.oschina.net/u/109289/blog/30321