Chris, This is a good point. What I am discovering is that while I was calling a terminate method on the Thread in the ContextListener.contextDestroyed() method, my thread lives for quite while, because it is sleeping and does not wake up to test the terminate flag for several minutes. My solution was to reduce the sleep time down to a few seconds and only really do something every 20 time it wakes up. This allowed it to discover the terminate flag much sooner. I did not call the "destroy()" method because I though it was deprecated and dangerous. I noticed that the Probe application does have a destroy Thread which works, but warns of being dangerous.

I am still trying to figure out why a second thread is spawned. Haven't gotten to bottom of that issue yet.
-d

Christopher Schultz wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

David,

On 4/28/2009 10:52 PM, David.Meldrum wrote:
I need a background task which I implemented as a thread that I stated
in the ContextListerner.

[snip]

The problem I noticed is that while I only call
the BackGroundThread.*start()* method once.  I see at least two threads
running in Tomcat (las seen in Thread dump and looking at it in
"Probe").

Are you re-deploying your application at all? If you are only starting
your thread, you will be starting a new thread for each deployment. So,
if you re-start your application, a second (or third, or fourth) will be
created.

Tomcat doesn't kill your application's threads when the app dies. You
need to end them yourself. Since you already have a ContextListener,
just add a destroy() method that shuts down the background thread.

Apologies if you're already doing this, but you didn't mention it and I
figure it's the most likely scenario.

- -chris

Reply via email to