HI:我有一个多线程Java数据库应用程序,我们必须创建一个自定义的数据库池。原因是我们的一些预备陈述必须在连接中缓存。我们有一个基于一个免费hashmap的原始解决方案,另一个是锁定的hashmap。使用hashmap,我们必须使用synchronized方法,然后我们的吞吐量会受到影响。选择是使用concurrentHashMap,以便同步部分尽可能小。有一些示例代码吗?或者我应该下载apache DBCP源代码来阅读?
答案 0 :(得分:1)
使用synchronized会花费你大约1-2微秒。如果这对您至关重要,则不应使用JDBC。恕我直言。仅通过TCP连接访问服务可能花费100微秒,而许多JDBC数据库的延迟为1-10毫秒。
我怀疑每次查询/更新几毫秒都适合你,在这种情况下使用同步不太重要。
根据您拥有的线程数量,您可以为每个线程建立一个线程本地连接。这样可以尽可能地减少开销。
答案 1 :(得分:0)
您有一个多线程应用程序,但许多线程是否同时使用相同的数据库连接?由于PreparedStatement缓存将在连接级别完成,如果连接一次由单个线程使用(我认为应该是这种情况),则不需要同步。