ManagerThread i kończenie wątków

0

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 :)

0

zamiast while(true) zrób while (!Thread.currentthread().isInterrupted) ?


public void run()
{
   try
   {
      while (!Thread.currentthread().isInterrupted)
      {
           // wykonuj zadanie


      }
   }
   finally
   {
       // posporzataj po watku jesli sie zakonczy lub zostanie przerwany
   } 
}

po co mieszać w to egzekutory :P

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