Могу ли я прекратить поток, ожидающий подключения TCP? - PullRequest
4 голосов
/ 11 апреля 2011

У меня есть приложение, где поток прослушивает TCP-соединения, и его нужно будет уничтожить.Каков наилучший способ сделать это?Я знаю, что Thread.stop устарел, достаточно ли прерывать поток?

Ответы [ 3 ]

7 голосов
/ 11 апреля 2011

Если у вас есть ссылка на ServerSocket, вы можете вызвать его метод close().Это приведет к тому, что поток, ожидающий на accept(), выдаст SocketException.

Обратите внимание, что вы, вероятно, не хотите предоставлять ссылку на сам сокет;вам, вероятно, следует добавить метод к вашему серверному коду с именем shutdownServer() или аналогичный, который делает это сам.

1 голос
/ 11 апреля 2011

Обычно - да, вы должны использовать Thread.interrupt () и общую переменную. В вашем конкретном примере вы можете просто закрыть Socket, чтобы поток немедленно вернулся. Читайте об этом здесь .

0 голосов
/ 11 апреля 2011

Вы можете установить переменную "stop", которую поток проверяет после каждого соединения.Затем подключитесь к порту потока, чтобы разбудить его.

Другой подход - установить тайм-аут с вызовом на soTimeout() и проверять переменную «stop» после каждого соединения и по истечении времени ожидания.Вы, вероятно, не хотите устанавливать слишком короткое время ожидания.Это означает, что поток не остановится немедленно, поэтому он может не работать для вас, если требуется быстрое завершение работы.

Вы также можете вызывать close () непосредственно в ServerSocket, если это возможно, как упомянуто Марком Петерсом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...