自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 Datawhale12月组队学习【推荐系统】Task01

datawhale12月组队学习【推荐系统】

2022-12-13 18:15:23 168 1

原创 源码阅读总结

两周的源码阅读活动结束啦,第一次阅读源码,了解了开源项目的结构,也跟同学们学到了阅读源码的一些技巧,虽然只能看懂一些流程上的设计,但是万事开头难,想要对核心逻辑有所突破还需要多练多看,尤其是涉及到多线程锁的部分,接下来要学习java多线程。这次活动也给我了一些学习的思路,期待下次活动哦。...

2022-05-20 21:22:44 128

原创 DruidDataSource类源码分析(七)

createPhysicalConnection( )获得url,user,passwordconn = createPhysicalConnection(url, physicalConnectProperties)public Connection createPhysicalConnection(String url, Properties info) throws SQLException { Connection conn; if (getProxyFilters().s

2022-05-19 22:44:57 371

原创 DruidDataSource类源码分析(六)

createAndStartDestroyThread( )两种回收连接池的策略:通过作DestroyConnectionThread按timeBetweenEvictionRunsMillis间隔调度执行destoryTaskprotected void createAndStartDestroyThread() { destroyTask = new DestroyTask(); if (destroyScheduler != null) { long pe

2022-05-18 21:20:34 159

原创 DruidDataSource类源码分析(五)

CreateConnectionThread( )该流程独立运行,大部分时间处于等待状态,不会抢占cpu但是当连接不够用时,就会被唤起追加连接,成功创建连接后将会唤醒其他正在等待获取可用连接的线程.public class CreateConnectionThread extends Thread { public CreateConnectionThread(String name){ super(name); this.setDaemon(true);

2022-05-17 21:39:14 188

原创 DruidDataSource类源码分析(四)

pollLast( )核心逻辑是自旋,判断是否有可用连接,然后发送empty消息,通知生产者线程可以创建连接。之后阻塞wait。只不过这个方法需要设置超时时间。 private DruidConnectionHolder pollLast(long nanos) throws InterruptedException, SQLException { // estimate超时时间 long estimate = nanos; for (;;)

2022-05-16 22:13:49 214

原创 DruidDataSource类源码分析(三)

discardConnection( )通过JdbcUtils关闭连接if (holder == null) { return;}Connection conn = holder.getConnection();if (conn != null) { JdbcUtils.close(conn);}调整activeCount和discardCount这俩参数什么含义不太清楚lock.lock();try { if (holder.discard) {

2022-05-14 21:56:19 242

原创 DruidDataSource类源码分析(三)

getConnectionInternal( )检查closed和enable状态是否正确,抛出异常就推出if (closed) { connectErrorCountUpdater.incrementAndGet(this); throw new DataSourceClosedException("dataSource already closed at " + new Date(closeTimeMillis));}if (!enable) { connectErro

2022-05-13 22:32:40 278

原创 DruidDataSource类源码分析(二)

分析DruidDataSource类中的方法getConnectionDirect( )首先通过一个for循环自旋,确保连接的创建。for (;;) { // handle notFullTimeoutRetry DruidPooledConnection poolableConnection; try { //调⽤getConnectionInternal 获取连接 poolableConnection = getConnectionIntern

2022-05-12 22:35:44 548

原创 DruidDataSource类源码分析(一)

实现DataSource中的方法getConnection( )@Overridepublic DruidPooledConnection getConnection() throws SQLException { /** * 实现DataSource接口的getConnection方法 */ return getConnection(maxWait);}public DruidPooledConnection getConnection(long maxWaitM

2022-05-11 22:07:06 340

原创 为什么需要数据库连接池

5.10 | 为什么需要数据库连接池:使用数据库直接连接对 MySQL 多半是进行连接(connection),增删改查并提交(execSQL、commit),关闭连接(close)操作,然后实现业务相关逻辑。其操作也很清晰:建立TCP连接验证数据库认证信息发送请求(数据的 CRUD 操作)关闭数据库连接关闭TCP连接数据库连接池在业务量流量不大,并发量也不大的情况下,连接临时建立完全可以。但并发量起来,达到百级、千级,其中建立连接、关闭连接的操作会造成性能瓶颈,所以得考虑连接

2022-05-10 21:28:45 1107

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除