2016-06-21 55 views
0

我试图在Java中使用GPars来处理几种类型的消息。 每个消息类型都有一个actor。GPars - 我如何知道演员是否忙?

但消息处理需要花费大量的时间,而消息不断传来。在演员很忙的时候,我需要忽略即将到来的消息(只是扔掉它们)。

我怎么知道,如果一个演员GPars忙?我知道Actor.isActive()方法,但我不太确定它是什么东西(JavaDoc非常模糊和不清楚),我找不到任何有用的信息。

回答

0

恐怕没有内在的方法来确定这一点。您必须自己实施繁忙控制算法,可能是基于CountdownLatches。

0

一般情况下,这可能是有问题的,作为一个演员只能一次处理一个消息,你有什么解决方案要做到这一点,就会有局限性。例如,您可以在演员,主管和工作人员中有演员。

工人演员是真正做这项工作的人。工作会发送给主管。主管有一个布尔变量,比如isBusy,最初是false。当收到工作时,主管将该变量设置为true,并将工作传递给工作人员。工作完成后,工作人员将结果发送回主管,主管将isBusy设置为false并返回结果。

如果另一个消息传入而isBusy是假的管理员可以只发送回一个消息,如isBusy消息,或者什么也不做是你说你想要的。

注意,如果工人崩溃,或重新启动时,isBusy仍然是真实的。如果它能满足您的需求,您将需要考虑这个解决方案。有一个邮箱可能会更好,因为我不知道。

不管你做什么,你应该尽你所能避免创建情况下,你可以在一个糟糕的状态让你的演员系统,最好的运气。