2016-04-07 3 views
0

Я пишу java NIO, AsynchronousSocketChannel. В «завершить», по умолчанию большинство программистов использовать этот код:asynchronousSocketChannel записывает и прерывает другую часть программы

while(asynchronousSocketChannel.read(buffer).get() != -1) 

Этот код причины ждать РЕСПОНД сервера, но я хочу, чтобы настроить его и не ждать, пока сервер, я имею в виду, я хочу чтобы сделать что-то еще и после этого чека, если там написано или не так, как показано ниже:

while(true){ 
if(asynchronousSocketChannel.read(buffer).get() != -1){ 
    //do something 
} 
else{ 
    //do something else 
} 

стараюсь кучу другого алгоритма, но он не работает. У кого-нибудь есть идея?

+0

Просьба представить доказательства того, что большинство программистов используют этот код. Это полная трата времени, чтобы использовать асинхронные сокеты полностью синхронно, как это. Было бы проще использовать режим блокировки NIO или 'java.net.Socket'. – EJP

+0

«В операции синхронного ввода-вывода поток вступает в действие и ждет, пока запрос ввода-вывода не будет завершен (программа« застревает », ожидая завершения процесса, без выхода). Когда происходит одно и то же действие в асинхронной среде поток выполняет операцию ввода-вывода с большей помощью ядра. Фактически, он немедленно передает запрос ядру и продолжает обрабатывать другое задание ». читая это, я предполагаю, что асинхронный вариант может быть лучшим выбором для моей системы, которая будет БОЛЬШОЙ. Я не понимаю, почему мой случай воспринимается как «полностью синхронный», по вашему мнению? – APNezh

ответ

0

Вы должны опубликовать прочитанное, сделать «что-то еще», а затем получить результат прочитанного будущего.

+0

Извините, я хочу попросить вас упомянуть об этом более ясно, что я абсолютно уверен, что когда я использую какой-то сервер, который отвечает на этот клиент (клиент - это Asynchronous Client (на основе CompletionHandler)), код будет запущен (он должен быть запущен, потому что asynchronousSocketChannel.read (buffer) .get() больше не -1), но если сервер не отвечает на него, программа полностью остановится. для меня это действительно странное поведение, особенно когда я вижу этот пример в надежной книге – APNezh

Смежные вопросы