如何控制连接到RMI服务器的多个客户端线程

时间:2013-12-07 09:06:42

标签: java networking rmi serversocket

被盗:

http://publib.boulder.ibm.com/infocenter/javasdk/v1r4m2/index.jsp?topic=%2Fcom.ibm.java.doc.diagnostics.142%2Fhtml%2Fid1418.html

“在服务器端,当客户端连接到服务器套接字时,会分叉一个新线程来处理来电。”

那么如何控制这些客户端线程,以便我可以让客户端1等到客户端2出现然后执行他们需要执行的任何操作?

谢谢。

2 个答案:

答案 0 :(得分:1)

您无法控制线程,但您不需要它。您已控制远程方法。只需在远程方法实现中放置所需的任何同步,动作,信号量等。

话虽如此,这是一个非常奇怪的要求。通常客户是彼此独立的。

答案 1 :(得分:1)

我同意@EJP这是一个非常奇怪的要求。我提供的解决方案应该可以工作,但通常是你绝对不想做的事情,因为它会阻塞线程导致糟糕的可用性和可伸缩性。

您可以使用CountDownLatch

来实现此目的

将静态CountDownLatch设置为1

public class RmiEndPoint{
    static CountDownLatch startSignal = new CountDownLatch(1);

客户端2将其计算在内

    public void executedByClient2(){
        SharedLock.countDown();
    }

客户端1等待它

    public void executedByClient1(){
        SharedLock.await();
        // do whatever you want to do
    }
}

在实际代码中,你肯定希望有一些超时,这样如果client2没有显示你的应用程序就不会挂起