自定义连接池速度慢(JAVA)?

自定义连接池速度慢(JAVA)?,java,jdbc,connection-pooling,Java,Jdbc,Connection Pooling,对于我的项目,我们被要求实现我们自己的连接池。我们不允许使用来自jdbc的PGPoolingDataSource。当我使用jdbc池时,我的程序运行得非常快,而我自己的连接池运行得不可预测,速度也慢得多。我的连接使一些任务等待了很长时间,这是jdbc池所没有的 我正在使用Arrayblockingqueue实现连接池,我只是创建一个预先说过的连接数,然后让客户机借用并放回 我的意思是,这对我来说似乎是有意义的,而且是有效的。但是它很慢,有时任务需要很长时间才能完成,我还有什么可以改进的吗?使其更

对于我的项目,我们被要求实现我们自己的连接池。我们不允许使用来自jdbc的PGPoolingDataSource。当我使用jdbc池时,我的程序运行得非常快,而我自己的连接池运行得不可预测,速度也慢得多。我的连接使一些任务等待了很长时间,这是jdbc池所没有的

我正在使用Arrayblockingqueue实现连接池,我只是创建一个预先说过的连接数,然后让客户机借用并放回


我的意思是,这对我来说似乎是有意义的,而且是有效的。但是它很慢,有时任务需要很长时间才能完成,我还有什么可以改进的吗?使其更快更可靠?

您使用了错误的数据结构来存储连接
ArrayBlockingQueue
是减慢处理速度的FIFO结构,使用
ConcurrentLinkedQueue
是合理且更快的选择。

从池中获取连接时,
如果(c==null | |!c.isValid(2))
此验证检查是否通常返回false,因此必须创建一个全新的连接?否,但这只是为了确保如果连接无效/或为null,我们将创建一个新的连接。请详细说明?你看,我有很多线程访问这个有我的连接的队列,当然我希望首先请求连接的请求首先得到服务,对吗?那么为什么arrayblockingqueue不行呢?我还想说你的建议对我很有帮助,我现在正在学习ConcurrentLinkedQueue arrayblockingqueue的行为是正确的,但一次只能有一个线程访问它,
ConcurrentLinkedQueue
允许多个线程同时访问它。