Terminating a thread when program exits.
Sun's developer online training website has an example of a JDBC
connection pool.
http://java.sun.com/developer/onlineTraining/Programming/JDCBook/conpool.html
One of the things it does is start a "reaper" thread that watches for
stale connections (see below).
If I run my test program from Eclipse, this reaper thread keeps running
when my program has otherwise finished. I didn't notice this to start
with and so after a few test runs Eclipse started reporting that the VM
was out of memory.
I think I need to replace "while(true") below with "while(poolExists)"
and set poolExists to false somehow when my program wants to exit.
The JDCConnectionPool is instantiated by the constructor of
JDCConnectionDriver which I instantiate in my application start-up.
Because the pool is written as a JDBC driver wrapper, there's not much
leverage for the app to force a clean up.
I suppose I could add a finalize() to JDCConnectionDriver and some
methods in JDBCConnectionPool and ConnectionReaper to set poolExists false.
I'm not sure if this is a good way to go about this, ideas?
Also the sleep() lasts 5 mins, I'd prefer some way to force a quicker
interruption of this sleep() - Thread.interrupt()?
---------------- from JDCConnectionPool -----------------------
class ConnectionReaper extends Thread {
private JDCConnectionPool pool;
private final long delay=300000;
ConnectionReaper(JDCConnectionPool pool) {
this.pool=pool;
}
public void run() {
while(true) {
try {
sleep(delay);
} catch( InterruptedException e) { }
pool.reapConnections();
}
}
}
-----------------------------------------