Что я делаю, это добавляю логический флаг с именем killRequest или что-то, что включено в длительный цикл.Например:
//long running loop in thread:
while (someMainLoopCondition && !killRequest)
{
//do stuff;
}
Также создайте метод для изменения флага внутри потока:
public requestTermination()
{
killRequest = true;
}
Затем вы можете вызвать
myThread.requestTermination();
или создать методдля очистки:
private void KillNetworkThread(boolean b)
{
if (nThread != null) { // If the thread is currently running, close the socket and interrupt it.
try {
nThread.requestTermination();
nis.close();
nos.close();
nsocket.close();
} catch (Exception e) {
}
Thread moribund = nThread;
nThread = null;
moribund.interrupt();
}
}
Это, наконец, решило мою давнюю проблему потока.Надеюсь, это поможет!