[問題] 在物件被註銷時自動執行某些事
如標題,主要是想用類似資料庫連線(Connection)
或是socket連線上
像這種東西,我覺得有一個很麻煩的地方
就是必須要在不用時,去呼叫close的方法
程式才會去關閉連線
如果忘記呼叫的話,像下面這樣
//開個資料庫連線,然後把他設null,不呼叫close()
Conn conn= new Conn();
conn.select();
//conn.close();
conn=null;
Thread.sleep(600000L);
就會.......
mysql> SHOW PROCESSLIST;
+----+------+----------------+------+---------+------+-------+----------------
| Id | User | Host | db | Command | Time | State |Info
+----+------+----------------+------+---------+------+-------+----------------
| 42 | root | localhost:2769 | test | Sleep | 163 | |NULL
| 44 | root | localhost:2772 | NULL | Query | 0 | NULL |SHOW PROCESSLIST
+----+------+----------------+------+---------+------+-------+----------------
2 rows in set (0.00 sec)
上面那個資料庫連線就一直卡在那邊了.....
現在我正在寫個連線池去管理資料庫連線。
請問有任何辦法可以防止,使用這個連線池的人,拿了連線就沒還的狀況嗎?
不管是吐錯誤也好,或是強制回收連線也行.....
或是,有辦法去取得,有多少物件正在參照這個物件嗎?
如果有的話就能自己寫回收機制了.....
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.233.153.51
→
06/12 00:55, , 1F
06/12 00:55, 1F
推
06/12 01:10, , 2F
06/12 01:10, 2F
看了官網的lease,他是用個bool去判斷是不是在使用中。
然後記錄領取時間,超時的話就自己收回去
public synchronized boolean lease() {
if(inuse) {
return false;
} else {
inuse=true;
timestamp=System.currentTimeMillis();
return true;
}
}
不是很想這樣用
因為假設我打算長時間使用資料庫連線的話
可能用到一半就被收回去了。
※ 編輯: LaPass 來自: 125.233.153.51 (06/12 01:31)
→
06/12 01:35, , 3F
06/12 01:35, 3F
推
06/12 01:59, , 4F
06/12 01:59, 4F
推
06/12 07:21, , 5F
06/12 07:21, 5F
→
06/12 07:21, , 6F
06/12 07:21, 6F
→
06/12 08:11, , 7F
06/12 08:11, 7F
→
06/12 09:35, , 8F
06/12 09:35, 8F
→
06/12 11:58, , 9F
06/12 11:58, 9F
→
06/12 12:52, , 10F
06/12 12:52, 10F
→
06/12 13:34, , 11F
06/12 13:34, 11F
推
06/12 17:18, , 12F
06/12 17:18, 12F
→
06/12 17:19, , 13F
06/12 17:19, 13F
推
06/12 17:53, , 14F
06/12 17:53, 14F
→
06/12 18:59, , 15F
06/12 18:59, 15F
→
06/12 19:01, , 16F
06/12 19:01, 16F
→
06/12 19:02, , 17F
06/12 19:02, 17F
推
06/13 01:28, , 18F
06/13 01:28, 18F
→
06/13 01:29, , 19F
06/13 01:29, 19F
→
06/13 02:20, , 20F
06/13 02:20, 20F
→
06/13 02:22, , 21F
06/13 02:22, 21F
推
06/16 12:30, , 22F
06/16 12:30, 22F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 7 篇):