Вам понадобятся две темы.
Сторожевой поток будет следить за потоком чтения и прерывать его при обнаружении тайм-аута.
Пусть поток чтения сообщит потоку контроля, что он собирается начать чтение, и когда он завершит чтение.
Попросите сторожевой поток запустить таймер, когда начинается чтение, и прервать поток чтения, когда он истекает, или прекратить прослушивание на время, когда чтение завершено.
Читайте о потоке Java, если вы не знакомы с ним. Легко иметь многопоточную ошибку.