s, которые будут прерваны при операциях блокировки. Вы можете использовать NIO с блокирующими операциями, чтобы они работали почти так же, как Java IO, т. Е. Вам не нужно заново разрабатывать приложение, чтобы использовать селекторы / диспетчеры и т. Д.

жный дубликат:
Как немедленно прекратить блокировку потока при работе с сокетом IO?

У меня есть клиент, запущенный в потоке, хочу читать из сокета в Java. Но во время чтения, возможно, я хочу убить поток. Так что яinterrupt это, но методы чтения сокета бросаютInterruptedException? Я не нашел.

Итак, как я могу красиво попросить поток умереть, пока он блокирует чтение сокета?

Спасибо

 sgokhales29 мая 2011 г., 06:22
 deFreitas02 февр. 2019 г., 20:17
Проверьте эту ссылкуэто работает длячитатель а такжеInputStream

Ответы на вопрос(3)

заблокированный в операции ввода-вывода, он может выдатьInterruptedIOException, Другой возможный способ разблокировать поток, заблокированный наSocket это закрытьSocket.

Для более подробной информации, смотрите мой ответ на этот вопрос:Как немедленно прекратить блокировку потока при работе с сокетом IO?

 Stephen C30 мая 2011 г., 06:01
@zaharpopov - явно не задокументировано. Но поищите в исходном коде JDK 6 (используя вашу любимую IDE), и вы увидите много примеров, когда прерывание превращается вInterruptedIOException.
 zaharpopov29 мая 2011 г., 06:38
Что вы имеете в виду "может бросить"? Как я точно знаю, если чтение сокета TCP выбрасывает его? Разве это не будет проверено, и я должен был поймать?
 Suraj Chandran01 дек. 2011 г., 08:02
@StephenC Только NIo будет поддерживать это, традиционные чтения сокетов не будут читать
 zaharpopov29 мая 2011 г., 15:50
Javadoc темы упомянуть нет InterruptedIOException. Куда мне смотреть, пожалуйста?
 Stephen C29 мая 2011 г., 15:08
Это проверено. Смотрите Javadoc.

InterruptableChannels, которые будут прерваны при операциях блокировки. Вы можете использовать NIO с блокирующими операциями, чтобы они работали почти так же, как Java IO, т. Е. Вам не нужно заново разрабатывать приложение, чтобы использовать селекторы / диспетчеры и т. Д.

Как немедленно прекратить блокировку потока при работе с сокетом IO?

В основном, когда тыclose() сокет, все связанные потоки закроются, в результате чего все заблокированные операции будут разблокированы.

Или вы можете позвонитьThread.interrupt() и он прервет операцию блокировки, заставив его броситьInterruptedException.

 zaharpopov29 мая 2011 г., 06:39
Могу ли я закрыть сокет из одного потока, пока другой блокирует его «чтение»?
 raudi18 апр. 2016 г., 16:24
Я проверил это с Java 8 и, по крайней мере, тамнет InterruptedException выбрасывается. Метод read просто возвращает (с -1) и устанавливается флаг Thread.interrupted ().

Ваш ответ на вопрос