Java асинхронный/не блокирующий InetAddress.getByName

196
05 июня 2018, 03:00

Здравствуйте пишу однопоточную программу на java работающую с помощью nio.

Мне нужно создавать сокет по домену и я использую InetAddress.getByName, но он блокирующий и при первом вызове с данным аргументом может выполнятся чуть ли не секунды, как получить InetAddress не блокируя поток и желательно без дополнительных потоков или с константным их количеством?

Answer 1

Сделать асинхронный dns-запрос не выйдет. По крайней мере без сторонних библиотек. Придётся использовать thread pool и future:

ExecutorService executor = Executors.newFixedThreadPool(POOL_SIZE);
Future<InetAddress> future = executor.submit(() -> InetAddress.getByName(dnsName));
while (true) {  // Цикл событий
    if (!future.isDone())
        continue;
    InetAddress addr = future.get();
    ...
}
READ ALSO
Динамический индикатор клавиатуры

Динамический индикатор клавиатуры

Хочу сделать в JavaFX приложении динамический индикатор клавиатурыПодскажите что не так в моем коде

190
Ограничение ввода textField

Ограничение ввода textField

Как сделать так, чтобы было одновременно, и ограничение ввода символов (ничего кроме цифр), и их количество не более 4По отдельности они работают,...

191
Предназначение логических операторов

Предназначение логических операторов

Я знаю как с битами работать, типа сдвиги, операторы |, &, ^В просторах интернета пишут, что они используются для низкоуровневых задач, в технике...

161