El estilo asíncrono es el que más difiere: corrutinas de Kotlin y suspensión de compilación en devoluciones de llamada/máquinas de estado; Java tradicionalmente usa subprocesos, grupos de subprocesos, CompletableFuture (Java 8) y, desde Java 21, los subprocesos virtuales hacen que el código con apariencia de bloqueo sea barato a escala. El mismo objetivo: no desperdiciar subprocesos del sistema operativo esperando.
Kotlin: suspensión y corrutinas