Допустим есть у меня отдельный поток который в цикле while ожидает ответ от сервера, например:
while (!Thread.interrupted()) {
// InputStream.read()
// Какие-то действия
}
И допустим я из вне хочу прервать этот поток командой Thread.interrupt(). Тогда, как я понимаю, поток не прервется до тех пор, пока он не примет сообщение, не обработает его, и уже возвращаясь к условию цикла не прервется. Как прервать поток ввода, не дожидаясь ответа?
В Java реализация потоков зависит от реализации JVM, а именно:
InterruptedExceptionСкорее всего вам повезет, потому что в современных версиях Windows/Linux JVM использует механизм многопоточности предоставляемый ОСом, а там в Windows/Linux нормальная многопоточность с квантованием процессорного времени и проч. бантиками.
Для того чтоб тормознуть поток, надо в нем установить флаг interrupted в true, а в самом потоке мониторить этот флаг, и если он равен true, выбросить исключение InterruptedException.
Посмотрите здесь Oracle tutorials interrupts
Сборка персонального компьютера от Artline: умный выбор для современных пользователей