This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
The RMI specification is quite explicit that you cannot rely on thread behavior at all. So you cannot rely on two clients getting different threads (they may get the same thread), likewise you cannot rely on one client using the same thread for two subsequent method calls (it may get a new thread or may use a thread that was previously used by another client.
As an alternative, you might want to look at using an RMI Factory to create a new connection object per client. You could then use RMI's Unreferenced interface or the finalize() method to do clean up. You could look at the topic "Does the lock associate session ID or customer ID?" for some examples of that.
You are right . I just find that : when a client get a rmi reference,the server does not spawn a thread for it. When it call method from the server object ,the server spawn a thread for it. But after the call returned,the connection is not kept by the server.the server may release the connection any time.