使用ThreadPoolExecutor和连接池而不使用随机阻塞方法调用

时间:2016-02-24 16:14:25

标签: java connection-pooling nonblocking threadpoolexecutor

我已经使用StackOverFlow很长一段时间了,总能找到现有的答案,但这次我找不到任何有关我尝试做什么的信息。

使用java,我有一个由大约10个不同任务组成的进程,它们使用纯jdbc从这里收集不同的数据(这里没有ejb / jpa)。每个任务(可调用的)实际上可以并发运行,并负责获取连接,这正是我们正在做的。但是,我们随机遇到连接池问题(通过jndi访问),有时我们会因为连接池没有任何可用连接而被阻止。

为了解决这个问题,我认为我们可以改变我们获取连接的方式,而不是让每个可调用的开放和关闭连接(遵循要执行的任务数和要使用的线程数) ThreadPoolExecutor),我想创建一个专门用于此过程的本地连接池,以便我们确定以后什么都不会阻塞(最终如果我们无法获取所有请求的连接,那么我们会使用至少1)

来调整要启动的线程数

我的同事批准了这个想法,但让我感到惊讶的是,我无法在网上找到任何类似的方法或讨论(也许我没有使用正确的关键字)。

我想知道你对这个想法的看法,你是否尝试过类似的东西,或者我是否遗漏了一些重要的东西。

事先,谢谢。

3 个答案:

答案 0 :(得分:0)

您尚未提及使用哪个连接池。如果它不是HikariCP而你被允许切换,那么我就推荐它。

答案 1 :(得分:0)

HikariCP最终似乎相当有趣,我将不得不进一步检查。但这与问题没有直接关系:)

答案 2 :(得分:0)

只需稍微回报一下经验,我的想法是有效的,有一点需要注意,我无法摆脱从runnable到我的实现的一个downcast,我可以在我的before()期间做.setConnection() ExecutorService的。并且必须使用execute()方法将所有任务赋予执行程序,否则runnable将自动包装在FutureTask中,而无法访问内部runnable。也许你们其中一个人知道要正确地做到这一点?