被盗:
“在服务器端,当客户端连接到服务器套接字时,会分叉一个新线程来处理来电。”
那么如何控制这些客户端线程,以便我可以让客户端1等到客户端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没有显示你的应用程序就不会挂起