我有一个RMI控制器,它通过网络接收请求。该控制器委托akka演员负责,后者当时与工作人员联系以解决代数操作。
下面的代码是否足以确保我的akka主演员(masterActor)能够正确接收并响应RMI为每个请求创建的每个线程的所有请求?我的意思是,Patterns.ask和Await.result线程是否安全?他们有一种方法可以通过互斥来访问masterActor参考吗?或者我需要在我的控制器中创建一个关键部分?
Class MyController extends ... {
/* ... */
ActorRef masterActor;
/* ... */
public <O extends AlgebraOp<R>, R extends Equation & Resolved> R resolve(
Equation AlgebraOp, Context context){
EquationAndContext message = new EquationAndContext(AlgebraOp, context);
Future<R> future = (Future<R>) Patterns.ask(masterActor, message, timeout);
R operationResolved = null;
boolean timeoutExpired = false;
while(!timeoutExpired) {
try {
operationResolved = (R) Await.result(future, timeout.duration());
timeoutExpired = true;
} catch (Exception timeExpired) {
/* Re-build the future for next try */
future = (Future<R>) Patterns.ask(masterActor, message, timeout);
}
}
return operationResolved;
}
}
干杯
答案 0 :(得分:0)
是的。
如果同时调用resolve
,您会发现Patterns.ask
和Await.result
没有问题。