发表于: 2017-04-29 19:18:33

1 1290


今日完成

1、写DBPool

写到这里时,我感觉这个代码非常蠢,将在for循环里用上昨天的所谓工具类,新建无数个对象只为得到一些conn而且还有很多try-catch会在循环中,就算勉强写出来,性能也会蠢得很。

还有数组不好变长,应该用类集。


google看看工具类是什么样子的,改造MySQLUnit

对工具类暂时的理解是,引入类后,因为方法是static,所以不需要构造对象也能直接使用

close连接只需要conn.close();似乎不需要加,删了


完成DBPool

构造函数及变量

拿连接和还连接

没有连接怎么办,这里的连接数达到最大值加不了怎么办特意没写,想看看效果

加连接的方法,这里try catch在循环外就感觉比一开始好多了


主函数,这里就没还连接,因为没写多线程,顺序执行的话还了就可以无限用了

正常没问题,想要拿超过maxSize的conn的话

是说数组的异常大概,欲从一个空的队列中取值。

如果把handle里的改为this.wait();那么将会报错:

应该是主线程睡死了,没人喊


改造主函数,学习写一个线程并给主函数调用

有借有还的好线程,睡1s假装执行SQL语句

主函数,每10ms生成一个线程

结果T8之后全部异常,猜测是没有加同步,他们都以为集合里还有连接,其实没有


根据最小同步的原则,尝试同步判空位置,不如预想的能解决问题


把所有方法同步上也没有解决问题。。。陷入僵局,debug模式断点处理,不会控制各线程行为


处理了很久改成这个样子,然后发现不报错了,他们都死等着。。。


哇,原来我线程学了等待,不知道唤醒,惊了。。。

还连接的时候通知所有其他线程

问题解决,井然有序,非常棒。


但是把中while 改成if的话,会出现 隔几个线程就的问题


将notifyAll改为notify只通知头一个等待的线程可以用if

最让我惊讶的是当我把notify注释掉,想看会是什么错误时。居然没报错!!!!!!!!

原来是很多线程睡死了,虽然不报错,但是也没执行。1000线程看不出来,100个立即看出来了

明日计划

完成任务1,对,明天应该是请假,后天做

收获

多线程,连接池实现,工具类,debug等


问题

本来编辑了最后一个问题,发现居然解决了



返回列表 返回列表
评论

    分享到