上午我試了下JDBMonitor(http://www.cownew.com),并閱讀了部分代碼
我覺得想法挺好的,不過我也發現了一個BUG
我試了下DEMO里面TEST,結果發現如果使用SocketDBListener則整個程序不能正常結束
我查了下代碼發現是SocketDBListener里面的THREAD不是后臺的,而且也沒有手工關閉的原因
我改成后臺的之后就沒問題了
另外還發現一個問題,
在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() 最好在最后調用,而且最好在FIANLLY里用,如:
finally{
super.finalize();
}
2) 關閉socket之類的工作在fianlize里面做不太好,在我的測試里,當MAIN方法進行完了后
finalize并沒有執行,而且因為SocketDBListener里面的THREAD還在,所以shoutdownHook也沒有執行;
而且即使該為后臺線程,能正常關閉了,finalize也不一定進行的
所以建議為IDBListener增加一個主動關閉的方法