最近看了设计模式和锁的一些知识,就想着自己写点什么巩固一下知识。
然后就随便写了一个类似(也许不像)连接池的这么一个demo。
定义一个连接类 Connection,用户查询操作,里边有

这样几个方法,刚开始在池中是直接用isFree()判断状态,然后在用setState()方法改变状态的,发现这样不好保证原子操作,所以增加了checkAndSetStates()方法。
定义函数式接口 Content(用于接收连接后的具体查询操作):

定义连接池 Pool:

execute()方法 中使用try finally 代码段,保证线程出错,仍会归还连接。
getCon()方法使用自旋的方式,减少不必要的上下文切换,等待获取空闲连接。
构造函数初始化连接池大小:

源代码放在了我的gitee仓库里,这个仓库里边还有我总结的一些设计模式的demo,有兴趣的小伙伴可以看看,可以让你更加轻松的理解设计模式!
git地址:https://gitee.com/watermelon_x/design_pattern.git
博客地址:https://wmelon.cn/200.html
网友评论