Reset TimerTaska i liczenie czasu od nowa

0

W konstruktorze obiektów swojej klasy mam m.in. Timertaska, który po upływie jakiegoś tam czasu ma zmienić wartość pewnej zmiennej.

timer=new Timer();
timer.schedule(new TimerTask() 
		{

			@Override
			public void run() {
				// TODO Auto-generated method stub
				is_alive=false;
				System.out.println("-------------Zmiana boolena---------------");
				
			}
			
		}, 16*1000); 

Jednak w przypadku gdyby temu obiektowi udało się wykonać inną metodę chciałbym "zresetować" timer i liczyć czas od nowa. Ma ktoś jakiś pomysł jak to zrealizować?

0

Może tak:

timer.cancel();
timer=new Timer();
timer.schedule(new TimerTask()...
0

Dzięki @bogdans za podpowiedź.

Niestety dalej nie wiem jak sobie poradzić z zadaniem dlatego pociągnę temat.

Mam obiekty(będące wątkami), które mają żyć przez pewien określony czas. W przypadku gdyby udało im się wykonać pewną metodę, czas ten ma być liczony od początku. Jeśli ta metoda się nie wykona, wątek ma być ubijany. Obecnie mam coś takiego:

@Override
public void run() { 
while (is_alive) { 
     // metody które wątek ma wykonywać
}
}

W konstruktorze tych obiektów odpalam TimerTaska, który po zadanym właśnie czasie ma zmienić wartość booleana is_alive na false:

is_alive=true;
		timer=new Timer();
		timer.schedule(new TimerTask() 
		{

			@Override
			public void run() {
				// TODO Auto-generated method stub
				is_alive=false;
				System.out.println("-------------Zmiana boolena---------------");
				
			}
			
		}, 16*1000); 

Mam jednak dwa problemy: while sprawdzi się dopiero po przeleceniu całej jednej iteracji, więc nie wychwyci zmiany booleana od razu. Po drugie nie wiem jak ubić wątek i wypisać jego stan na konsolę. Próbowałem w konstruktorze odpalać drugi timer, który działałby cały czas i ręcznie ubijał wątek, ale coś mi to nie działa:

pilnowacz.schedule(new TimerTask() {
			
			@Override
			public void run() {
				while(true) {
					if(is_alive==false) {
						Thread.currentThread().interrupt();
					}
				}
				
			}
		}, 0); 

Ma ktoś jakiś pomysł jak można by zrealizować powyższe zadanie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1