Лучшие решения для проверки, если данные в потоке, используя функции потока Java? - PullRequest
0 голосов
/ 31 июля 2011

У меня есть приложение, которое должно читать сотни соединений сокетов.

Я использую ThreadPool с верхним пределом числа потоков для обслуживания этих сокетов.Это вызывает блокировку всех потоков, если сокеты не имеют входящих сообщений.

В настоящее время я использую soTimeout 100 мс, чтобы избежать постоянной блокировки.Мне не нравится этот подход, так как он может прерваться, как только начинает получать входные данные.

Есть ли какой-либо другой подход к этому?

Я пытался проверить с помощью ObjectInputStream.isAvailable (), но это всегдавозвращает 0 независимо от того, есть данные в потоке или нет.

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

Ответы [ 2 ]

1 голос
/ 31 июля 2011

Это как раз та проблема, которую должны решать платформы NIO.К сожалению, использование сырого NIO немного сложнее, чем блокирование ввода-вывода.Если вы можете, я бы порекомендовал вам попробовать фреймворк, такой как Netty , который облегчит вам эту работу.

1 голос
/ 31 июля 2011

Вы можете дать NIO шанс.Используйте Selector и SocketChannels для ожидания данных вместо создания потока для каждого сокета.

Selector

SocketChannel

...