Допустим есть у меня отдельный поток который в цикле while ожидает ответ от сервера, например:
while (!Thread.interrupted()) {
// InputStream.read()
// Какие-то действия
}
И допустим я из вне хочу прервать этот поток командой Thread.interrupt()
. Тогда, как я понимаю, поток не прервется до тех пор, пока он не примет сообщение, не обработает его, и уже возвращаясь к условию цикла не прервется. Как прервать поток ввода, не дожидаясь ответа?
В Java реализация потоков зависит от реализации JVM, а именно:
InterruptedException
Скорее всего вам повезет, потому что в современных версиях Windows/Linux JVM использует механизм многопоточности предоставляемый ОСом, а там в Windows/Linux нормальная многопоточность с квантованием процессорного времени и проч. бантиками.
Для того чтоб тормознуть поток, надо в нем установить флаг interrupted в true, а в самом потоке мониторить этот флаг, и если он равен true, выбросить исключение InterruptedException.
Посмотрите здесь Oracle tutorials interrupts
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Занимает ли переменная место в куче при объявлении? Иными словами, если я захочу объявить переменную, повлияет ли это на объем используемой...
Как заставить компонент GUI(кнопку, например) передать в метод класса-слушателя параметр?
как я могу проверить, вернул ли что-то данный запрос? ResultSet rs = stmtexecuteQuery( "SELECT * FROM USERS WHERE NICK ='" + nick + "';" ); (Я хочу проверить имеется ли запись...
Из статического блока вызываю метод который инициализирует массив (причем в самом методе это видно - выводит 35)Но когда обращаюсь в коде - оказывается...