Czy da się jakkolwiek przerwać wątek, w którym jest uruchomiona funkcja z nieskończoną pętlą while(true) przykładowo?
pomijam całą implementacje kodu, a tylko najważniejsze części:
a więc, mam taki oto kodzik, który uruchamia mi klasę ManagerThread (pomysl moj :) )
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(new ManagerThread(s, classLoader, prop));
executor.shutdownNow();
w ManagerThread oczywiście mam funkcje run(), głębiej w niej leci sobie pętla, która to uruchamia klasę klienta, a ta klasa klienta, ma służyć do poruszania się, tylko klasę klienta nie wiem nigdy kto będzie pisać, bo mają ją w przyszłości implementować (teoretycznie) studenci, którzy mają tylko udostępniony interfejs:
public interface IClient {
public void startGame();
public Direction makeMove(SimpleGameState gameState);
}
moment zapętlenia gdy w kliencie będzie while(true);
Direction kierunek = client.makeMove(simpleState);
więc, mój problem tkwi w tym, że mam uodpornić kod na błędy w ManagerThread, tak aby przykładowo zabić wątek gdy w klasie klienckiej będzie np. wrzucona nieskończona pętla w funkcji gdzie się porusza.
I jak widać wyżej, próbowałem z ExecutorService, shutdown oraz shutdownNow ale nie zabija wątku.
W załącznikach, cały plik Manager.
Managera uruchamiam z argumentami: 60 300 5 5 clients.txt
gdzie po kolei: maxGameTime, moveTime, showTime, tries oraz classFile
gdzie classFile to plik textowy z nazwami klas klientów, którzy są właśnie ładowani przez Managera i testowani.
Dziękuje za pomoc z góry :)