有次给客户写一个数据库链接池的插件,因为本人公司的产品是NoSqL数据库,不能和开源的数据库链接池配合使用,全部只有本身动手写java
其中有一个场景是这样的:多个线程从一个池子里面拿链接,超时时间是5秒,就是wait(5000),再这段时间里面等到池子唤醒该线程,我才开始调用datasource对象的notifyAll方法,结果程序测试没跑多久就挂了。后来改为notify()就行了。
数据库
过了这么久,我理解是notifyAll唤醒了多有等待的线程,这些线程一旦唤醒就不老实继续等到5秒结束,notify()只唤醒其中一个线程,那个其余线程都老老实实的睡着。并发
我这个线程使用jdk5之前的知识,如今让我从新写,我会使用java的并发库,这也是effective java里面推荐的方式。测试