On Tue, Jul 12, 2011 at 10:03, David kerber <dcker...@verizon.net> wrote:

> On 7/12/2011 9:59 AM, Kris Schneider wrote:
>
>> On Tue, Jul 12, 2011 at 7:59 AM, Caldarale, Charles R
>> <chuck.caldar...@unisys.com>  wrote:
>>
>>> From: Terence M. Bandoian [mailto:tere...@tmbsw.com]
>>>> Subject: Terminating Timer Thread Gracefully
>>>>
>>>
>>>  Finally, in contextDestroyed, I inserted a call to
>>>> Thread.sleep after canceling the timer and the error
>>>> message disappeared.
>>>>
>>>
>>> You should be able to do a Thread.join() using the timer's Thread object
>>> rather than sleeping.
>>>
>>
>> But Timer doesn't expose its thread. An alternative would be use
>> something like Executors.**newSingleThreadScheduledExecut**or() to get a
>> ScheduledExecutorService. The executor can be used to schedule a
>> Runnable with a fixed rate or delay. When the context is destroyed,
>> shutdown the executor and await its termination.
>>
>
> No need even to do that; just .cancel() the timer.


Except that didn't work, according to Terence, until he added a sleep after
cancelling the timer. Could that be because the timer thread is busy
performing tasks that take some time to run? After cancel() is called the
timer thread "terminates gracefully" (according to the Java doc) which means
waiting for the currently executing task, if any, to finish.
-- 
Len

Reply via email to