Очень мало информации, чтобы ответить что-то вразумительное. По идее бесследно такое происходить не должно. При разрыве соединения вроде должен выкидываться какой-то Exception. Ещё возможно в коде обработчика запроса возникает какой-нибудь Exception или Error.
Попробуйте поискать что-нибудь в логах. Если ничего нет, советую попробовать обернуть обработчики запросов в try{...}catch(Throwable e) {...} и вывести его куда-нибудь отдельно.
А зачем вам в данном случае этот "isr.ready()"? Не пробовали просто сразу делать in.readLine() в цикле? Это вызов блокирующий и должен ждать пока не дождётся конца очередной строки.
И ещё, вы можете посмотреть нагрузку даже для вашего решения? По-идее она должна быть близка к нулю (по крайней мере, я так предполагаю), т.к. на проверку "isr.ready()" тратятся микросекунды (или даже наносекунды), а основное время поток находится в sleep, т.е. не жрёт CPU (хотя, конечно, такой подход в любом случае неправильный, могут быть разные проблемы при большом количестве таких потоков или при больших нагрузках).
Попробуйте поискать что-нибудь в логах. Если ничего нет, советую попробовать обернуть обработчики запросов в try{...}catch(Throwable e) {...} и вывести его куда-нибудь отдельно.