2015-10-23 2 views
0

Существует простая ситуация, как:FileChannel.read() не бросать ClosedByInterruptException

нитяным: попробуйте прочитать из FileChannel как

length = tun.read(tunPacket.buffer); 

Эта операция является блокировать этот волоске ,

Резьба B: дождитесь ввода пользователем, (кнопка останова). Когда это событие происходит, вызывает метод A interrupt(). Несмотря на то, что FileChannel является орудием AbstractInterruptibleChannel, это не бросать ClosedByInterruptException

Я использую Android 6.0, если материя, и есть the documentation

Я пытаюсь решить эту проблему, но выглядит невозможным ...

+1

Хммм, из документа, используя общий смысл, я думаю, что вам лучше называть 'close' на' FileChannel' (в Thread B) не 'interrupt()' поток A ... – Selvin

+0

Интересно, я попробовал это, но нет никакого 'AsynchronousCloseException' или какого-либо исключения. – SPYFF

+1

да ... но какой tun.read (..) возвращается? не так ли? ... так что вы узнаете в Thread A что-то прерывать чтение ... *, но нет никакого AsynchronousCloseException или любого исключения * из документа, который должен был произойти (без исключения) – Selvin

ответ

0
length = tun.read(tunPacket.buffer); 

Эта операция блокировать этот поток.

Очевидно, что нет. Это не займет много времени, и ваш interrupt() мог легко пропустить его. Вы не представили никаких доказательств того, что вы были фактически в этом методе, в настоящий момент выполнено interrupt().