上午我試了下JDBMonitor(http://www.cownew.com),并閱讀了部分代碼
我覺得想法挺好的,不過我也發(fā)現(xiàn)了一個BUG
我試了下DEMO里面TEST,結(jié)果發(fā)現(xiàn)如果使用SocketDBListener則整個程序不能正常結(jié)束
我查了下代碼發(fā)現(xiàn)是SocketDBListener里面的THREAD不是后臺的,而且也沒有手工關(guān)閉的原因
我改成后臺的之后就沒問題了
另外還發(fā)現(xiàn)一個問題,
在SocketDBListener的代碼里有這么一段:
protected void finalize() throws Throwable
{
super.finalize();
for(int i=0,n=clientList.size();i<n;i++)
{
Socket socket = (Socket) clientList.get(i);
socket.close();
}
}
這樣有2個問題:
1)super.finalize() 最好在最后調(diào)用,而且最好在FIANLLY里用,如:
finally{
super.finalize();
}
2) 關(guān)閉socket之類的工作在fianlize里面做不太好,在我的測試?yán)铮?dāng)MAIN方法進(jìn)行完了后
finalize并沒有執(zhí)行,而且因為SocketDBListener里面的THREAD還在,所以shoutdownHook也沒有執(zhí)行;
而且即使該為后臺線程,能正常關(guān)閉了,finalize也不一定進(jìn)行的
所以建議為IDBListener增加一個主動關(guān)閉的方法