说说bonecp,数据库连接池,先来张图:
其实池化这种技术方案,有很多应用,常见的DB连接池、线程池、对象池,比如bonecp、jdk的threadPoolExecotor、tomcat里的processorPool等等;
创建需要较多资源,你需要提前创建,并且进行管理,来保提高序运行的效率。
bonecp的源码给人的感觉蛮简洁,她的线程模型是并发模型,由PoolWatchThread等后台线程维护连接池;
连接池并发策略方面,使用ConnectionPartion,减少锁粒度,就类似ConcurrentHashMap里的Segment段锁,上图:
首先,确定线程模型,其次,缕清线程关系,最后,选好并发策略;当然,actor、函数你就不必纠结并发策略了。
多线程并发方面,涉及cpu缓存、java内存模型、编译器&处理器指令重排、临界区,以及线程竞争、线程协作等方面,volidate、syschronized、AQS、CAS,以及lock、concurrent等并发类库,并行模式worker、角色模式actor,lamaba函数并行,作为老板的你,协调这些人干活。