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?