Does RMI handles multiple clients by itself? i.e.
yes
how it works? does it make a new thread for each call? if one clients blocks the function what would happen with the next client? etc.
It creates a thread for each client connection.
If one client calls a synchronized method or one which blocks other calls, calls made by other threads will block until that call releases the resource.
It sounds like you already worked out the answers, do you have a more specific doubt?