发表于: 2017-04-29 19:18:33
1 1291
今日完成
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等
问题
本来编辑了最后一个问题,发现居然解决了
评论