ну вот в том то и соль, неблокирующий ио возможен только на колбеках в жабе. у тебя, например, опсылается несколкьо парелльных запросов через netty/vertx или иную очень NIO штуку, тебе нужно получить результат обеих - ты объединяешь их в какой-нибудь Future но общий результат можешь получить только колбеком - т.к. колбек будет исполнен эвент лупом под капотом либы, если ты сделаешь это пярмым вызовом типа .get() то твоё NIO превратися в блокирующие, а один из тредов экзекутора станет заблокированным, либо селить рядом второй тредпул в контором на каждую такую пару запросов будет выделятся системный тред для ожидания результата.
> неблокирующий ио возможен только на колбеках в жабе
Это так из-за того, что нет генераторов. Были бы генераторы — была бы эмуляция корутин. И не было бы callback hell соответственно.
Неблокирующее i/o при этом "системно" может быть устроено по разному.
> но общий результат можешь получить только колбеком - т.к. колбек будет исполнен эвент лупом под капотом либы
Вместо колбека может быть и генератор, с которым работать можно будет в стиле асунк/эвейта. При этом вызов этого генератора не будет блокирующим, т.к. генератор в множестве мест приостанавливается и исполнение передаётся другому генератору в том же ивент лупе.