Итак, у меня есть пакет OSGi, который создает такой таймер ...
Timer timer = new Timer(true);
// running timer task as daemon thread
timer.scheduleAtFixedRate(this, 0, 2 * 1000);//my class extends the timer task
// cancel after 60s
try
{
Thread.sleep(60000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
finally
{
timer.cancel();
}
Это работает нормально, пока пакет OSGi не остановлен до завершения задачи таймера. Если я попытаюсь остановить пакет до истечения времени ожидания таймера (например, 60 с), я получаю исключение, что пакет не может быть остановлен чисто.
В моем методе деактивации пакета я отменяю таймер, но я предполагаю, что, поскольку поток спит, остановка пакета не вызывается до истечения времени ожидания
Я просто хотел понять, есть ли способ остановить пакет до истечения времени ожидания, который также убьет задачу таймера?