Как прервать readLine в BufferedReader

Я пытаюсь читать входные данные из сокета построчно в нескольких потоках. Как я могу прервать readLine () , чтобы я мог изящно остановить поток, который он блокирует?

EDIT (bounty) : это можно сделать без закрытия сокета?

39
задан Hernán Eche 13 September 2011 в 00:27
поделиться

3 ответа

Закройте гнездо на прерывающей резьбе. Это приведет к возникновению исключения в прерванном потоке.

Для получения дополнительной информации об этом и других проблемах параллелизма я настоятельно рекомендую книгу Брайана Гетца "Java Concurrency in Practice".

23
ответ дан 27 November 2019 в 02:41
поделиться

вы можете создать класс Timer вокруг блока read().

вам нужно установить тайм-аут для вашего таймера.

По тайм-ауту просто прервите свою ветку.

0
ответ дан 27 November 2019 в 02:41
поделиться

Я думаю, что вам, возможно, придется использовать что-то другое, кроме readLine(). Вы можете использовать read() и на каждой итерации цикла проверять, был ли поток прерван, и выйти из цикла, если это так.

BufferedReader reader = //...
int c;
while ((c = reader.read()) != -1){
  if (Thread.isInterrupted()){
    break;
  }
  if (c == '\n'){
    //newline
  }
  //...
}
-1
ответ дан 27 November 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: