NIO与JDBC的再思考:同步与阻塞在论域上的根本区别

风格不统一 提交于 2019-12-04 19:03:43

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可以同时进行它们的动作。这样的话,就没有必要一定要用多个连接去连接同一个数据库。

如果用一个连接就可以达到同时即并发与数据库通信的目的,那我为什么要用连接池呢?特别是在并不存在任何事务性需求的环境下?

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!