当前位置:  开发笔记 > 编程语言 > 正文

实现自定义连接池?

如何解决《实现自定义连接池?》经验,为你挑选了0个好方法。

我想知道我是否需要实现自己的连接池,什么是高级算法?

我在google上浏览了几个解决方案(链接下方),但所有这些解决方案看起来都不适合我.当我说可扩展时,我主要关注的getConnection()/borrowConnection()方法,我需要确保如果多个线程同时调用此方法,它们不会获得相同的连接,并且等待是最小的.以下所有解决方案都使用同步方法/块方法,这种方法根本不可扩展,因为像电子商务线程这样的应用程序必须等待.

    https://codereview.stackexchange.com/questions/40005/connection-pool-implementation

    http://www.javaworld.com/article/2076690/java-concurrency/build-your-own-objectpool-in-java-to-boost-app-speed.html

    https://sridharrao85.wordpress.com/2011/07/20/sample-connection-pool-implementation/

    http://www.javamadesoeasy.com/2015/12/connection-pooling-in-java-with-example.html

我的解决方案: -基本上我的方法专注于如何在粒度级别减少并发性,而不是在持有连接池的数据结构上.所以我会保留两个清单(arralylist)

    ConnectionsNotInUse

    ConnectionInUse

ConnectionsNotInUse将在启动时保存池中的所有连接(包装在自定义连接类中).现在,如果一个线程要求连接,一旦它成功获取,它将从ConnectionsNotInUse中删除它并将其放入ConnectionsInUse.

在每个自定义连接类中,将有一个方法getConnection()方法,它将使用Semaphore.tryAcquire() 它获取一个锁,如果有一个锁并立即返回,值为true.它将是一个许可证的信号量.因此,如果线程没有获得连接,它将循环遍历列表中的另一个连接.

如果最后如果线程没有得到任何连接,如果最大允许限制允许,它将创建另一个连接,否则它将等待连接被释放.一旦释放连接,它就会通知等待连接的线程

有关方法的任何意见/建议吗?

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有