Java NIO Channels non blocking mode

Hello

Ich habe eine Frage zum non blocking mode

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

serverSocketChannel.socket().bind(new InetSocketAddress(9999));
serverSocketChannel.configureBlocking(false);

while(true){
    SocketChannel socketChannel =
            serverSocketChannel.accept();

    if(socketChannel != null){
        //do something with socketChannel...
        }
}

Ich verstehe nicht ganz wie das funktionieren soll, beim blocking, wartet ja der Server auf eingehende Verbindung, auch wenn es 1 std dauert. Und arbeiotet dann weiter.
Bei nicht blockieren, ist es ja dann nur reiner zufall wenn es genau in dieser millisekunde wo das Programm in der Zeile serverSocketChannel.accept(); eine Verbindung rein kommt.

Wie ist das zu verstehen mit nicht blockierend? Ist eine Verbindung nicht mehr möglich sobald serverSocketChannel.accept(); passiert wurde? Ich verstehe das so, das es ein reiner Zufall ist das der Client genau in dem richtigen Moment eine Verbindung aufbaut. Aber das kann ja nicht sein oder?

Welchen vorteil hat es den server nicht blockierend zu machen?

ohne es konkret zu kennen vermute ich dass die Verbindungen immer an allgemeiner Stelle ankommen
und da in eine Warteschleife gehalten werden bis durch ein accept() die Verbindung in den nächsten Status übergeht,
wenn Pech dann bis dahin Timeout, das ist wohl war, aber etwas Zeit ist normalerweise immer vorhanden,

kann mir gut vorstellen dass auch das bei Blocking oder den älteren ServerSockets so ist,

wenn da ein accept() erfolgreich ist und dann die Minimum-Arbeit des Öffnen eines Threads stattfindet,
gibt es auch kein Zeitfenster, in dem Verbindungen scheitern könenn, wäre nicht akzeptabel,

der ServerSocket/ ServerSocketChannel wird immer weiter sammeln,
das accept() ist schlicht das Abholen der wartenden Verbindungen

Blocking oder nicht bezieht sich auf den Code des Programmierers, soll der blockieren oder nicht,
macht nicht so viel Unterschied, kann man auch immer nachbauen:
ein Thread wartet blockierend, schreibt die akzeptierten Verbindungen in eine Liste, ein zweiter Thread arbeitet sie periodisch ab,

aber damit man diesen Standard nicht bauen muss bietet es ServerSocketChannel selber an, funktioniert genauso

hier ein vollständigeres Beispiel zur Verwendung mit SelectionKey
Java NIO - Non Blocking IO and Multiplexing