Когда другой поток вызывает closeConnection(), поток не достигает Log.d("Subscriber", "Client thread has ended.");
Почему это? Что такое блокирующее поведение потока, который был закрыт? Я думал, что попытка написать или флеш к нему приведет к генерации исключения IOException, но, похоже, код все еще блокируется. Где? Я не могу найти информацию о том, что происходит, когда вы прерываете() при записи, или что происходит при записи в закрытый выходной поток.Каково поведение записи закрытого OutputStream? Почему мой поток не заканчивается?
public void closeConnection() {
try {
this.interrupt();
autoCloseOutputStream.close();
} catch (IOException e) {
Log.w("Subscriber", "IOException when closing stream. Buffer might not have been flushed to client.");
}
}
@Override
public void run() {
Log.d("Subscriber","Client thread has started.");
ByteBuffer pgnAndDataBytes=null;
while(true) {
try {
pgnAndDataBytes=fmsByteBufferSubscriberQueue.take();
} catch (InterruptedException e) {
break;
}
Log.d("Subscriber","Still running thread");
try {
autoCloseOutputStream.write(pgnAndDataBytes.array());
autoCloseOutputStream.flush();
} catch (IOException e) {
break;
}
}
Log.d("Subscriber", "Client thread has ended.");
}
Выход следующим образом:
Тем не менее работает нить
Тем не менее работает нить
Тем не менее работает нить
Закрыть называется.
И ничего более. Где это блокирование и почему?
Кажется, он блокирует в: autoCloseOutputStream.write (pgnAndDataBytes.array()); Как я могу оставить этот метод блокировки? – JohnyTex